CREATE TABLE TT ( ID CHAR (8) NOT NULL, NM CHAR (10) DEFAULT '0' NOT NULL, PRIMARY KEY(ID));INSERT INTO tt (ID, NM) VALUES ('00000001', 'A')
INSERT INTO tt (ID, NM) VALUES ('00000002', 'B')
INSERT INTO tt (ID, NM) VALUES ('00000003', 'C')
INSERT INTO tt (ID, NM) VALUES ('00000004', 'D')+----------+----+
| ID       | NM |
+----------+----+
| 00000001 | A  |
| 00000002 | B  |
| 00000003 | C  |
| 00000004 | D  |
+----------+----+UPDATE  TT  SET ID = ConCat(Elt(Length(ID+10),'0000000','000000','00000','0000','000','00','0',''),ID+10) WHERE  ID =000000001+----------+----+
| ID       | NM |
+----------+----+
| 00000011 | A  |
| 00000002 | B  |
| 00000003 | C  |
| 00000004 | D  |
+----------+----+

解决方案 »

  1.   

    UPDATE  TT  SET ID = ConCat(Repeat('0',8-Length(ID+100)),ID+100) WHERE  ID =000000002+----------+----+
    | ID       | NM |
    +----------+----+
    | 00000011 | A  |
    | 00000102 | B  |
    | 00000003 | C  |
    | 00000004 | D  |
    +----------+----+以 Char 型代替INT 型,就可以实现 0打头的数字
    以后在更新时就要处理补0的问题,
    用上面的两种 函数配合方式就能达到你的期望了呵呵,应该符合你的要求了吧!!
      

  2.   

    SELECT  BENCHMARK(10000,ConCat(Elt(Length(ID+10),'0000000','000000','00000','0000','000','00','0',''),ID+10)) FROM TT;运行时间(秒)
    8.32
    8.29
    8.29
    8.29
    SELECT  BENCHMARK(10000,ConCat(Repeat('0',8-Length(ID+100)),ID+100)) FROM TT;运行时间(秒)
    8.35
    8.33
    8.32
    8.33
    环境
    CPU  CII 1000MHz呵呵,寻求更好的算法
      

  3.   

    不太明白,
    其实,我问:
    我通常用VARCHAR做ID的数据类型,但我觉得,我使用的ID也就只有0-9的十个字符,用8位来表示比较浪费,用4位表示0-9就够了。就省些。
    所以,我问MySql中有没有这种数据类型。用4位二进制表示一个字符。
      

  4.   

    有,binary varachar() or binary char()
      

  5.   

    char可以autoincrement吗?为什么我定义primary key总是不成功.
    探索JSP的小菜鸟..望大家多多指教.因为我实在是太菜了.
      

  6.   

    Char 不可以为AUTO_INCREMENT
    同样Date\DateTime\等也不可以
    只有数值型的才能设AUTO_INCREMENT属性
    包括浮点型,