在基于Mysql 5.5.57 Php 5.6.37安装程序的大型系统中
当前整个系统都在utf8中运行,包括在每个数据库连接开始处的SET NAMEs utf8。
我需要在其中一张表中支持表情符号,因此我需要将其切换为utf8mb4。我不想切换其他表格。
我的问题是-如果我将所有连接(utf8和utf8mb4)的设置名称都更改为utf8mb4,并将特定表仅切换到utf8mb4(并且仅将mb4数据写入此表)。系统的其余部分是否可以像以前一样工作?
在utf8表/数据/连接中使用SET NAMEs utf8mb4会不会有任何问题?
答案 0 :(得分:1)
我认为对所有连接使用SET NAMES utf8mb4
应该没问题。
({utf8mb3
是MySQL中utf8
的同义词;为清楚起见,我将使用前者。)
utf8mb3
是utf8mb4
的子集,因此,客户的 bytes 都会很高兴(Emoji除外,后者需要utf8mb4)。当字节到达(或来自)仅声明的列时,将进行检查以确认您没有存储表情符号或某些中文字符,但否则将以最少的麻烦进行操作。
我建议
ALTER TABLE ... CONVERT TO utf8mb4
是转换表的“正确”方法。但是,它将转换 all varchar / text列。这可能不好...
如果您将转换后的表JOIN
转换为未转换的表,那么您将尝试将utf8mb3字符串与utf8mb4字符串进行比较。 MySQL将举手并把所有行从一个转换为另一个。那INDEX
不会有用。
所以...请确保至少与JOINs
中涉及的所有列保持一致。