MySQL ENUM 和 SET 类型数据插入错误分析
MySQL ENUM 和 SET 类型数据插入错误分析
在 MySQL 中,ENUM 和 SET 类型常用于存储有限的预定义选项。以下代码创建了一个名为 t_enum_set 的表,其中 gender 列使用 ENUM 类型,hobby 列使用 SET 类型:
CREATE TABLE t_enum_set (
gender ENUM('男', '女'),
hobby SET('游戏', '睡觉', '打代码', '运动')
);
然而,如果尝试使用以下语句插入数据:
INSERT INTO t_enum_set VALUES(2, 5);
将会出现错误:
ERROR 1265 (01000): Data truncated for column 'gender' at row 1
这是因为 2 和 5 不是 ENUM 和 SET 类型列的合法取值。ENUM 和 SET 类型的值必须是定义的选项之一。
正确的插入方式:
INSERT INTO t_enum_set VALUES('男', '游戏,睡觉,打代码');
'男' 是 gender 列的合法取值,而 '游戏,睡觉,打代码' 是 hobby 列的合法取值,表示这个人的爱好是游戏、睡觉和打代码。
错误分析:
当使用数字 2 和 5 插入数据时,MySQL 会将它们自动转换为空字符串 ''。由于空字符串无法匹配 ENUM 和 SET 类型定义的选项,因此会被截断。最终插入的结果如下:
+--------+------------------+
| gender | hobby |
+--------+------------------+
| | |
+--------+------------------+
总结:
在使用 ENUM 和 SET 类型时,请务必使用定义的选项进行数据插入。切勿使用与选项无关的数字或其他类型的值,否则将导致数据错误。
原文地址: http://www.cveoy.top/t/topic/nnF6 著作权归作者所有。请勿转载和采集!