【发布时间】:2020-06-26 19:02:43
【问题描述】:
我有一个名为 p 的表 (mariadb 10.4):
+----------------+----------------------------------------------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+----------------------------------------------------------------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| description | text | YES | | NULL | |
| url | text | YES | | NULL | |
| source | enum('source_a','source_b','source_c','source_d','source_e') | YES | | NULL | |
我目前在这张表上有几百万行,其中有源 a、b、c 和 d。就在最近,我们应用迁移来添加 source_e,当尝试使用 source_e 插入一行时,我们开始收到错误 ERROR 1265 (01000): Data truncated for column 'source' at row 1。产生错误的使用命令如下:
INSERT INTO p (description, url, `source`) VALUES ('test', 'https://google.com.br', 'source_e');
任何其他来源的插入仍然有效。
编辑数据库上已经存在的行时行为发生变化,错误未显示:
UPDATE `p` SET `source`='source_e' WHERE `id`='3';
产量:
Query OK, 1 rows affected (0.001 sec)
有没有办法调试这个场景?我尝试更改数据库的日志级别以更好地了解问题 (SET GLOBAL log_warnings=3;),但错误消息没有改变。
我也尝试将source_e名称更改为source_e_,错误仍然存在。
顺便说一句,我确实更改了字段名称以符合公司政策。
【问题讨论】:
-
您是如何将“source_e”添加到源中的枚举值列表中的?
-
"ALTER TABLE `p` CHANGE COLUMN source source ENUM('source_a', 'source_b', 'source_c', 'source_d', 'source_e')" -
当您说您更改了字段的名称时,您的意思是您更改了枚举值吗?如果是这样,那么您可能有不再匹配任何新枚举值的现有行。
-
不,我的意思是我在问题上写的字段名称与实际数据库中看到的不一样。我没有使用更改的字段名称运行任何查询。在更改名称 ([a-z]+_[a-z]+) 时,我确实保持了相同的名称结构。此外,如果问题是现有数据,我会在尝试更改表时遇到错误,而不是在插入时。
-
听起来您通过将新值添加到列表末尾来添加新枚举值,这似乎完全正确。我没有其他想法。我将添加此链接,您可能已经看过:stackoverflow.com/questions/1501958/…