MySQL错误1265:列的数据被截断

时间:2020-09-01 04:21:17

标签: mysql sql enums truncated

我不知道为什么收到此消息。我正在使用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

任何建议都非常欢迎

2 个答案:

答案 0 :(得分:0)

查询本身是正确的。

modelling fiddle

执行

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

,然后检查输出中是否有列定义中未列出的值。

可能是拼写错误,前导/尾随空格或另一个未打印的符号,值中间的双倍空格,或者可能存在一些整理问题。


更新

我要更改为上面的当前字段定义是ENUM(“ Home”,“ Living”,“ Telecommunications”,“ Transportation”,“ Other”)。当我运行您建议的SQL时,只会列出房屋其他

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

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

答案 1 :(得分:0)

@Akina

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

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