【问题标题】:Mariadb 10.4 Data truncated for column 'column_name' on insert but not on updateMariadb 10.4 在插入时截断列“column_name”的数据,但在更新时未截断
【发布时间】: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/…

标签: mysql sql mariadb


【解决方案1】:

事实证明这是我的错。我们碰巧有一个插入该表的触发器,该触发器提供了一种物化视图类型的表。我所要做的就是将“source_e”添加到另一个表的源字段中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多