我有一个用latin1
编码的表格并整理latin1_bin
。
在我的表中有一个类型为'TEXT'的列comments
,因为您知道此列继承了表的编码和排序规则,但是从现在起我应该将其更改为utf8
和{{ 1}}因为我开始在utf8_general_ci
中存储特殊字符。
如果我使用如下命令会导致任何不利影响吗?
comments
感谢您的回答。
答案 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字符集的直接整数比较的整理顺序会降低查询速度。是否会显着减慢速度是另一个问题。查看这个的排名,以及它的排名,在表格中比较两个结果要比从数据库中检索磁盘上的信息快很多,你不会想象吗?