gpt4 book ai didi

mysql - 如何避免 MySQL 警告 #1265。列的数据被截断...,当在列表中插入默认为 NULL 的空字符串时?

转载 作者:行者123 更新时间:2023-11-29 02:45:15 26 4
gpt4 key购买 nike

我有一个表定义为

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 命令。

我想避免报告这种特殊情况,但仍会收到有关可能出现的任何其他问题的警告。

最佳答案

Mysql的enum数据类型可以有2 different empty (not null) value :

  1. 允许的一个普通的(可选)

  2. 一个错误值,表示在该字段中插入了不正确的值。这是枚举数据类型的固有行为。

区分这两个空值的唯一方法是索引:错误空值的索引为0;常规值将具有非零值。

在您的情况下,普通枚举列表不包含空值,并且关闭了严格的 sql 模式。因此,当您将空值取消插入枚举时,mysql 会检测到它不在列表中。由于关闭了严格的 sql 模式,mysql 仅发出警告并将该值设置为错误空字符串(索引 0)。您可以通过在查询中将枚举值转换为 int 来轻松检查这一点。

您有 2 个选项可以专门消除这些警告。这两种选择都有缺点,因此您应该仔细考虑您的操作。您甚至可以决定不理会警告(这就是我会做的)。

  1. 将空字符串添加到枚举列表中。缺点是空值的索引号会发生变化,并且可能会干扰对枚举字段进行的任何排序或过滤。

  2. 使用 before insert 触发器将空白值转换为 null。同样,这可能会干扰任何排序或过滤,也可能会减慢导入过程。

您必须检查源系统中如何处理空白值,并且必须评估应用程序是否有任何查询会受到所选方法的影响。

关于mysql - 如何避免 MySQL 警告 #1265。列的数据被截断...,当在列表中插入默认为 NULL 的空字符串时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43549386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com