MySQL:如何截断字段的长度

11
Alter table merry_parents change mobile mobile char(10).

当我执行上述操作时,出现以下错误:

#1265 - Data truncated for column 'mobile' at row 2

如何将我的手机号字段截断为char(10)?当前为char(12)。

4个回答

34
错误提示你在第2行(可能还有其他行)中有12个字符长的数据,因此已停止更改命令以避免丢失数据。
尝试使用SUBSTRING()更新表格来缩短列。不清楚为什么要这样做,因为这将会丢失一些数据,但是这将会截断数据到10个字符长:
UPDATE merry_parents SET mobile=SUBSTRING(mobile, 1, 10)

然后运行您的alter命令:

ALTER TABLE merry_parents CHANGE mobile mobile char(10).

谢谢。那个有效!:) 我正在使用测试数据,所以如果丢失数据也没关系。:) - vaanipala
看到我的表格中有一个性别字段 char(1),我想将其改为性别枚举('m','f','o'),我该怎么做? 直接从 char 改为 enum 时显示截断错误。 - dinesh kandpal

4

如果您可以接受将数据截断为10个字符 - 您可以先更新列,然后调整大小。

UPDATE <tablename> set mobile = left(mobile, 10);

然后运行您的修改语句。

在我的表中有一个字段是 char(1) 的 gender ,我想将其改为 gender enum('m','f','o'),我该怎么做?直接从 char 改成 enum 时显示截断错误。 - dinesh kandpal

4

如果你只想截断数据,可以使用ALTER命令的IGNORE选项一步完成:

ALTER IGNORE TABLE merry_parents MODIFY mobile char(10);

2
如果您没有使用古老版本的MySQL,这将不起作用。IGNORE在5.6中已被弃用,并在5.7中删除。请参见:https://dev.mysql.com/worklog/task/?id=7395 - philarmour

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接