数据库
首页 > 数据库> > 更改mysql表编码时是否有任何不利影响?

更改mysql表编码时是否有任何不利影响?

作者:互联网

我有一个用latin1编码并整理latin1_bin的表.

在我的表中有一个列类型为’TEXT’的列注释,您知道该列继承了表的编码和排序规则,但是从现在开始,我应该将其更改为utf8和utf8_general_ci,因为我开始在注释中存储特殊字符.

如果我使用类似以下的命令,会导致任何负面影响吗?

alter table notebooks modify comments text CHARACTER SET utf8 COLLATE utf8_general_ci;

谢谢您的回答.

解决方法:

危险,我认为ALTER会破坏现有文本.

另外,…您的“名字”看起来是中文,所以我猜您想存储中文字符吗?在这种情况下,您应该使用utf8mb4,而不仅仅是utf8.这是因为某些中文字符占用4个字节(并且不在Unicode BMP中).

我相信您需要2个步骤:

ALTER TABLE notebooks MODIFY comments BLOB;
ALTER TABLE notebooks MODIFY comments TEXT
          CHARACTER SET utf8mb4  COLLATE utf8mb4_general_520_ci;

否则,latin1字符将被“转换”为ut8.但是,如果您的栏中确实有中文,那么您就不需要latin1.上面的两步更改确实(1)关闭了字符集的任何知识,并且(2)确定字节确实是utf8mb4编码的.

为了更安全,首先

RENAME TABLE notebooks TO old;
CREATE TABLE notebooks LIKE old;
INSERT INTO notebooks SELECT * FROM old;

然后执行两个ALTER,并测试结果.如果遇到问题,您可以重命名以恢复旧副本.

标签:encoding,character-encoding,special-characters,mysql
来源: https://codeday.me/bug/20191118/2028157.html