請幫助我DEFAULT不組數據工作
CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig');
插入:
INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work!
感謝。
請幫助我DEFAULT不組數據工作
CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig');
插入:
INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work!
感謝。
DEFAULT
不會替換無效值,它只是定義了默認值,如果在插入沒有指定的使用。
它的工作原理應該如此。 更改您的架構是這樣,例如
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);
輸出:
| ID | ANIM | ------------- | 1 | pig | | 2 | pig |
這裏是SQLFiddle演示
+1到@ peterm的答案,但FWIW這裏有一些其他的方法可以說明行爲:
INSERT INTO ret (anim) VALUES (DEFAULT);
INSERT INTO ret() VALUES();
之所以插入,而不是一個空字符串值「根」的結果默認值是默認值在您指定值時未啓動。
值'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
好評:「MySQL」截斷「無效值,並插入一個空集。」坦克爲你提供幫助。 –
完美答案。謝謝 –
如果在插入中指定爲NULL,該怎麼辦? NULL值是否被替換爲默認值? – Jorrit
@Jorrit'null'是一個值,所以它將被用來代替默認值。小提琴在這裏:http://sqlfiddle.com/#!9/ea8037/1 – Joe