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

时间:2016-07-08 14:11:30

标签: mysql encoding character-encoding special-characters

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

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

如果我使用如下命令会导致任何不利影响吗?

comments

感谢您的回答。

2 个答案:

答案 0 :(得分:3)

危险我认为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并测试结果。如果出现问题,您可以RENAME取回旧副本。

答案 1 :(得分:0)

指定任何不涉及NATIVE字符集的直接整数比较的整理顺序会降低查询速度。是否会显着减慢速度是另一个问题。查看这个的排名,以及它的排名,在表格中比较两个结果要比从数据库中检索磁盘上的信息快很多,你不会想象吗?