只能说自己学艺不精对SQL服务器模式没有很好的认识,应该把MySQL手册从头到尾的啃一遍。

        事情起因是今天调试一程序在注册用户环节始终不成功,一看程序发现SQL是程序DB类自动构建的insert语句,例如:

USERS表结构:
CREATE TABLE `USERS` (
  `uid` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` CHAR(15) NOT NULL DEFAULT '',
  `password` CHAR(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `username` (`username`),
) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

insert语句:
INSERT INTO USERS (uid, username, password) VALUES ('', 'test', '6b649039a388694c7306cb4d14041a14')

看到这条insert语句想起第一次看到这样的语句是在Disduz论坛程序主题帖子复制功能的代码里,USERS表的uid是自增列insert语句的值给的空也可以生成下一个序列号。在今天调试程序里执行此insert语句时一直报错

Incorrect integer value: '' for column 'uid' at row 1

为什么在DZ里可以正常执行调试的程序执行就出错呢,比较一下两个程序的DB类发现DZ的DB类里多执行一条SET sql_mode=”语句,查了一下手册才知道是用来设置SQL服务器模式。将此语句加到调试程序中报错问题解决也能成功注册用户了,现在可以继续调试了……