我有一个表定义为如何避免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