我有一個表定義爲如何避免MySQL警告#1265。數據截斷列...,當在默認NULL列表上插入空字符串?
CREATE TABLE `flagged` (
`id` int(4) DEFAULT NULL,
`flag` ENUM('A','B') DEFAULT NULL
);
當執行
INSERT INTO `flagged` VALUES (1,'A'),(2,'B'),(3,NULL),(4,'');
我得到以下警告:
Query OK, 4 rows affected, 1 warning (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 1
Warning (Code 1265): Data truncated for column 'flag' at row 4
鑑於該數據是備份的結果(相當大的一個),我不能輕易操縱INSERT命令。
我想避免這種特殊情況的報告,但仍會收到任何其他可能出現的問題的警告。
您的'ENUM'不允許使用空字符串。也許它被壓縮到'NULL'? – tadman
**無聲**壓扁到'NULL'將是我的預期行爲。 但它既不沉默也不被壓縮爲NULL,但被接受。我懷疑原始數據庫是允許那些空的非空值,然後導致這些警告。 –
MySQL過去曾經默默地做過很多事情,但是更新的版本已經開始將這些事情表現爲警告和錯誤。這取決於您的服務器設置,並且一些默認設置被設置爲更嚴格。很多人對MySQL非常鄙視,因爲它會默默地做這樣的事情,沒有任何警告,最終會摧毀大量的數據。最好不要被警告和忽略,否則永遠不會知道它要做什麼。 – tadman