创建分区:p1229成功!                                                                                                     
 pName : p1230                                                                                                           
 startdate : 2011-12-30                                                                                                  
创建分区:p1230成功!                                                                                                     
 pName : p1231                                                                                                           
 startdate : 2011-12-31                                                                                                  
自动化创建分区失败...原因 :java.sql.SQLException: VALUES LESS THAN value must be strictly increasing for each partition 
                                                   

解决方案 »

  1.   

    按range分区如果正确指定分区的范围应该不会出现这个问题吧
      

  2.   

    SQL 语句:String cSql = "alter table `tbl_fax_records` add PARTITION ("
    + " PARTITION %s VALUES less than (to_days('%s')) ENGINE = InnoDB )";
    其他的都可以创建,就是在每个月最后一天的时候,就会出错了。分区名 和 范围都是正确的。pName : p1229
    faxStartDate : 2011-12-29
    pName : p1230
    faxStartDate : 2011-12-30
    pName : p1231
    faxStartDate : 2011-12-31
    pName : p101
    faxStartDate : 2012-1-01
    pName : p102
    faxStartDate : 2012-1-02
    pName : p103
    faxStartDate : 2012-1-03
      

  3.   

    VALUES LESS THAN value must be strictly increasing for each partition  
    语句不对
      

  4.   

    谁发个mysql 按日分区的例子看看。
     
    我是这样写的:
    Calendar ca = Calendar.getInstance();
    private String getPName(Calendar ca){
    ca.add(Calendar.DATE, 1);
    int date = ca.get(Calendar.DATE);
    int month = ca.get(Calendar.MONTH) + 1;

    // 天 分区名规则
    String pName = "p" + month + (date < 10 ? ("0" + date) : date);

    return pName;
    }

    // 获得当前日期 +1
    private String getTime(Calendar ca){
    // ca.add(Calendar.DATE, 1);
    int year=ca.get(Calendar.YEAR);
    int date = ca.get(Calendar.DATE)+1;
    int month = ca.get(Calendar.MONTH) + 1;


    String dateday = year+"-" + month +"-"+ (date < 10 ? ("0" + date) : date);

    return dateday;
    } String cSql = "alter table `tbl_fax_records` add PARTITION ("
    + " PARTITION %s VALUES less than (to_days('%s')) ENGINE = InnoDB )";
    是不是不对啊?
      

  5.   

    直接给出你的SQL语句,不要贴C的代码,未必所有人都懂C。
      

  6.   

    SQL 语句 我贴出来了啊。
    "alter table `tbl_fax_records` add PARTITION ("
    + " PARTITION %s VALUES less than (to_days('%s')) ENGINE = InnoDB )";第一个参数是分区名 第二个参数是范围下面是参数
    pName : p1229
    faxStartDate : 2011-12-29
    pName : p1230
    faxStartDate : 2011-12-30
    pName : p1231
    faxStartDate : 2011-12-31
    pName : p101
    faxStartDate : 2012-1-01
    pName : p102
    faxStartDate : 2012-1-02
      

  7.   


    原因 :java.sql.SQLException: VALUES LESS THAN value must be strictly increasing for each partition  这句话解释得很明白了。
    Value LESS THAN 值 必须 严格 增长 为了 每个 分区
      

  8.   

    最后一个分区必须必须指定为 LESS THAN MAX (好像是MAX,不是的话可以看mysql手册),不能指定为LESS THAN 具体的值
      

  9.   

    抱歉,说错了,最后一个分区范围必须要超过表中的最大数据,否则就会出现VALUES LESS THAN value must be strictly increasing for each partition这个错误,还有就是添加进去的数据必须要小于最后一个分区的范围。还有,你应该先预留几年后的分区,这样,这几年后你都可以不用添加分区了。