对 VARCHAR 修改强制截断?
Force Truncation on VARCHAR modification?
我想在一些列上将 VARCHAR 限制为 255,以便我可以添加索引。
alter table striker modify contacts varchar(255)
当我尝试运行上述命令时,我得到
Error Code: 1265. Data truncated for column 'contacts' at row 331 38.969 sec
有没有办法强制截断列,以便此命令成功缩短 VARCHAR?我不关心缩短列中的数据。
您可以手动将列截断为 255 个字符:
UPDATE striker
SET contacts = SUBSTR (contacts, 1, 255);
现在,您知道没有任何值超过 255 个字符,您可以安全地执行 OP 中的 alter table
语句。
为什么要截断该列?只需为列创建带有长度说明符的索引。这是一个例子:
create index idx_striker_contacts on striker(contacts(255))
您可以对多列执行此操作。
聚会迟到了,尽管我在 2022 年带着这个问题来到这里,但没有找到令人满意的解决方案。假设您正在本地制作原型,正如问题所暗示的那样,因为这些查询可能一如既往地对您的数据产生深远影响 - 请谨慎使用。有意简化和直接:这应该有效,假设您使用 root 权限登录 - 在接近生产的任何情况下很少会出现这种情况,对吧。这家伙暂时把严格模式等放在一边:
SET @tempsql_mode= @@global.sql_mode;
SET @@global.sql_mode= '';
alter table striker modify contacts varchar(255);
SET @@global.sql_mode= @tempsql_mode;
我想在一些列上将 VARCHAR 限制为 255,以便我可以添加索引。
alter table striker modify contacts varchar(255)
当我尝试运行上述命令时,我得到
Error Code: 1265. Data truncated for column 'contacts' at row 331 38.969 sec
有没有办法强制截断列,以便此命令成功缩短 VARCHAR?我不关心缩短列中的数据。
您可以手动将列截断为 255 个字符:
UPDATE striker
SET contacts = SUBSTR (contacts, 1, 255);
现在,您知道没有任何值超过 255 个字符,您可以安全地执行 OP 中的 alter table
语句。
为什么要截断该列?只需为列创建带有长度说明符的索引。这是一个例子:
create index idx_striker_contacts on striker(contacts(255))
您可以对多列执行此操作。
聚会迟到了,尽管我在 2022 年带着这个问题来到这里,但没有找到令人满意的解决方案。假设您正在本地制作原型,正如问题所暗示的那样,因为这些查询可能一如既往地对您的数据产生深远影响 - 请谨慎使用。有意简化和直接:这应该有效,假设您使用 root 权限登录 - 在接近生产的任何情况下很少会出现这种情况,对吧。这家伙暂时把严格模式等放在一边:
SET @tempsql_mode= @@global.sql_mode;
SET @@global.sql_mode= '';
alter table striker modify contacts varchar(255);
SET @@global.sql_mode= @tempsql_mode;