可能是這近更新Mysql的關係,發現原本預設是not null的字串欄位,開始不能不給值寫入了。雖然not null寫入一定要有值這很合理,但是要改的程式很多,所以我反而想尋找比較懶的解決方法。
解決方法只要在新增表格的時候,字串欄位給予預設空值;數字欄位給預設數值;日期欄位給空值:
CREATE TABLE IF NOT EXISTS `table1` (
`sn` int(11) NOT NULL auto_increment,
`title` varchar(100) collate utf8_bin NOT NULL default '',
`display` tinyint(4) NOT NULL default '1',
`uDT` timestamp NOT NULL default '0000-00-00 00:00:00'
);
如果是現有表格,使用SQL修改語法:
字串欄位
ALTER TABLE `table1` CHANGE `col1` `col1` VARCHAR(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
數字欄位
ALTER TABLE `hwList` CHANGE `num1` `num1` MEDIUMINT( 9 ) NOT NULL DEFAULT '0';
日期欄位
ALTER TABLE `hwList` CHANGE `DT1` `DT1` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE `hwList` CHANGE `DT1` `DT1` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
此操作字串欄位不能用mysqladmin 2版來幫忙,因為那個預設值的欄位無法填入空字串,不過3版以後可以:
改完以後,就能夠新增資料,但不必給not null欄位值。這和設定成null但不給值的差異在於,如果設定成null但不給值新增的話,該欄位會變成NULL,未來作select就要很小心:
select * from table1 where col1='' 會取不到 col1=NULL的資料。
select * from table1 where isnull(col1) 會取不到 col1=''的資料。
最後說phpMyadm已經出到4版了,是該升級了。
參考資料
[1] http://stackoverflow.com/questions/3357953/default-a-column-with-empty-string