【问题标题】:MySQL ERROR 1265: Data truncated for columnMySQL ERROR 1265:列的数据被截断
【发布时间】:2020-12-20 04:41:12
【问题描述】:

我无法弄清楚为什么我会收到此消息。我正在使用 MySQL Workbench,并且正在编辑 ENUM 字段中的值,该字段连接到我的应用程序中的下拉选项。

一切似乎都很好。我已经搜索过这个错误,我发现所有的都是数据类型不匹配,但在这种情况下,当 ENUM 提供一个字符串值数组时,这是不可能的。

这是 SQL

Executing:
ALTER TABLE `mydbase`.`average_monthly_expenses` 
CHANGE COLUMN `expense_category` `expense_category` ENUM('Home', 'Healthcare', 'Child care', 'Groceries and supplies', 'Eating out', 'Utilities', 'Telecomms', 'Laundry and cleaning', 'Clothes', 'Education', 'Entertainment gifts vacation', 'Auto and transportation', 'Insurance', 'Savings and investments', 'Charitable contributions', 'Itemized monthly payments') NULL DEFAULT NULL ;

Operation failed: There was an error while applying the SQL script to the database.
ERROR 1265: Data truncated for column 'expense_category' at row 1
SQL Statement:
ALTER TABLE `mydbase`.`average_monthly_expenses` 
CHANGE COLUMN `expense_category` `expense_category` ENUM('Home', 'Healthcare', 'Child care', 'Groceries and supplies', 'Eating out', 'Utilities', 'Telecomms', 'Laundry and cleaning', 'Clothes', 'Education', 'Entertainment gifts vacation', 'Auto and transportation', 'Insurance', 'Savings and investments', 'Charitable contributions', 'Itemized monthly payments') NULL DEFAULT NULL

欢迎提出建议

【问题讨论】:

    标签: mysql sql enums truncated


    【解决方案1】:

    查询本身是正确的。

    modelling fiddle

    执行

    SELECT DISTINCT expense_category, HEX(expense_category) 
    FROM mydbase.average_monthly_expenses
    

    并检查列定义中未列出的值的输出。

    可能存在拼写错误、前导/尾随空格或其他未打印的符号、值中间的双空格,或者可能存在一些排序问题。


    更新

    我正在尝试将当前字段定义更改为 ENUM('Home', 'Living', 'Telecommunications', 'Transportation', 'Other')。当我运行您建议的 SQL 时,我只会列出 HousingOther

    这些值在新列定义中不存在 - 因此服务器无法转换它们并截断这些值。

    建议:更改列定义,将新值添加到 ENUM 值列表但不要删除旧值;更新表并用新值替换旧值;更改列定义并从列表中删除旧值。

    【讨论】:

    • 这很奇怪。我正在尝试更改为上述字段定义的当前字段定义是ENUM('Home', 'Living', 'Telecommunications', 'Transportation', 'Other')。当我运行您建议的 SQL 时,我只会列出 HousingOther。删除 DISTINCT 给出相同的两个值,但重复两次(即 4 个值)。我想知道是否应该使用不同的单引号来分隔语句中的值?
    • @Hondaman900 请将此信息添加到您的查询文本中。
    • @Hondaman900 答案已根据您的信息更新。
    【解决方案2】:

    @Akina

    所以我弄清楚了为什么我被阻止编辑值。它不会让我进行任何更改值“住房”或“其他”的编辑。我按照您的建议做了,将我的新值添加到现有值中,没问题,效果很好。但是,我无法删除“住房”或“其他”,但其他先前的值删除得很好。目前,我保留了两者,使用“Housing”而不是“Home”,最后留下“Other”。

    但是我想知道为什么这两个值受到保护,然后我突然想到,有使用这些值的现有记录。我手动将使用“其他”的所有实例更改为“电信”,然后我可以从 ENUM 值中删除“其他”。现在一切都好。

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多