最近在了解商派的ecstore,发现一个奇怪问题:
发货单表sdb_b2c_delivery中主键delivery_id BIGINT(20) UNISGNED NOT NULL AUTO_INCREMENT我在数据库中手工添加记录时自动生成的delivery_id值是1758391266,可刷新后却自动变成1201307091798518754,这是为什么?求解!

解决方案 »

  1.   

    我用SQLyog管理数据库,Views、Stroed Procs、Functions、TRIGGERS 这四项都是空的
      

  2.   

    直接在SQLYOG下添加记录还是在程序中?
      

  3.   

    直接在SQLYOG中手工添加时生成的delivery_id 是1758391266,保存后刷新自动变成1201307091798518754在phpMyAdmin中点“规划表结构”,看到如下图:
      

  4.   

    在SQLyog中添加时截图如下:
    不用保存,直接点刷新后,截图如下:
      

  5.   

    直接在SQLYOG中手工添加后保存,再
    select * from ...
    结果如何
      

  6.   


    手工添加后保存截图如下:
    执行SQLSELECT * FROM sdb_b2c_delivery截图如下:
      

  7.   

    如果是插入后立即SELECT,此表上估计有TRIGGER
    show create table sdb_b2c_delivery
      

  8.   

    SHOW CREATE TABLE sdb_b2c_delivery结果如下:
    CREATE TABLE `sdb_b2c_delivery` (
      `delivery_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
      `order_id` VARCHAR(100) DEFAULT NULL,
      `delivery_bn` VARCHAR(32) DEFAULT NULL,
      `member_id` MEDIUMINT(8) UNSIGNED DEFAULT NULL,
      `money` DECIMAL(20,3) NOT NULL DEFAULT '0.000',
      `is_protect` ENUM('true','false') NOT NULL DEFAULT 'false',
      `delivery` MEDIUMINT(8) UNSIGNED DEFAULT NULL,
      `logi_id` VARCHAR(50) DEFAULT NULL,
      `logi_name` VARCHAR(100) DEFAULT NULL,
      `logi_no` VARCHAR(50) DEFAULT NULL,
      `ship_name` VARCHAR(50) DEFAULT NULL,
      `ship_area` VARCHAR(255) DEFAULT NULL,
      `ship_addr` TEXT,
      `ship_zip` VARCHAR(20) DEFAULT NULL,
      `ship_tel` VARCHAR(50) DEFAULT NULL,
      `ship_mobile` VARCHAR(50) DEFAULT NULL,
      `ship_email` VARCHAR(200) DEFAULT NULL,
      `t_begin` INT(10) UNSIGNED DEFAULT NULL,
      `t_send` INT(10) UNSIGNED DEFAULT NULL,
      `t_confirm` INT(10) UNSIGNED DEFAULT NULL,
      `op_name` VARCHAR(50) DEFAULT NULL,
      `status` ENUM('succ','failed','cancel','lost','progress','timeout','ready') NOT NULL DEFAULT 'ready',
      `memo` LONGTEXT,
      `disabled` ENUM('true','false') DEFAULT 'false',
      PRIMARY KEY  (`delivery_id`),
      KEY `ind_disabled` (`disabled`),
      KEY `ind_logi_no` (`logi_no`),
      KEY `idx_c_member_id` (`member_id`),
      KEY `idx_c_delivery` (`delivery`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
      

  9.   

    用上述代码另外建立1个表 OR 建立在另外1个数据库中,添加记录后,`delivery_id` 中的值没有变化
      

  10.   

    在别的数据库中新建同样结构的表,添加数据后delivery_id是从1开始排的,而且保持不变
      

  11.   

    那如果在PHP中执行
    INSERT INTO sdb_b2c_delivery (......
    怎么才能获得最终的delivery_id值呢?我用mysql_insert_id()获取的是1758391266而不是1201307091798518754
      

  12.   

    除非你找到1758391266是怎样变成1201307091798518754的,
    打开通用日志、检查TRIGGER等等方法
      

  13.   

    or
    select max(delivery_id) ....
      

  14.   

    找到原因了,不了解TRIGGER,也没找到。但确实是ecstore系统生成的delivery_id,不用原来的bigint是防止别人知道已经发了多少单子。
    以前人来没想到PRIMARY KEY、AUTO_INCREMENT类型的字段居然可以后期更改非常感谢您的帮助!
      

  15.   

    1201307091798518754这个值是select出来的吗