请帮帮我
CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig');
插入 :
INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work!
谢谢。
它可以正常工作。例如,像这样更改您的架构
CREATE TABLE RET (id int, anim SET('dog','pig','voon') DEFAULT 'pig');
然后在插入中省略anim
列
INSERT INTO ret (id) VALUES(1);
或者使用DEFAULT
关键字
INSERT INTO ret (id, anim) VALUES(2, DEFAULT);
输出:
| 身份证 | 动画 | ------------- | 1 | 猪 | | 2 | 猪 |
这是SQLFiddle演示
DEFAULT
不会替换无效值,它只是定义在插入中未指定时使用的默认值。
+1 对@peterm 的回答,但 FWIW 这里有几种其他方式可以说明行为:
INSERT INTO ret (anim) VALUES (DEFAULT);
INSERT INTO ret () VALUES ();
插入值 'root' 会导致空字符串而不是默认值的原因是,当您指定值时,默认值不会生效。
值 'root' 不是 SET 定义中的有效条目之一,但在默认行为下,MySQL 会“截断”无效值,并插入一个空集。它会在截断无效值时生成警告,但不会阻止 INSERT 发生。
您可以设置严格模式以禁用自动截断。这会将警告变成错误,并且 INSERT 将失败。
mysql> SET SQL_MODE=STRICT_ALL_TABLES;
mysql> INSERT INTO RET VALUES('root');
ERROR 1265 (01000): Data truncated for column 'anim' at row 1