使用带有utf8表的SET NAMEs utf8mb4

时间:2018-11-02 12:31:51

标签: php mysql encoding utf8mb4

在基于Mysql 5.5.57 Php 5.6.37安装程序的大型系统中

当前整个系统都在utf8中运行,包括在每个数据库连接开始处的SET NAMEs utf8。

我需要在其中一张表中支持表情符号,因此我需要将其切换为utf8mb4。我不想切换其他表格。

我的问题是-如果我将所有连接(utf8和utf8mb4)的设置名称都更改为utf8mb4,并将特定表仅切换到utf8mb4(并且仅将mb4数据写入此表)。系统的其余部分是否可以像以前一样工作?

在utf8表/数据/连接中使用SET NAMEs utf8mb4会不会有任何问题?

1 个答案:

答案 0 :(得分:1)

我认为对所有连接使用SET NAMES utf8mb4应该没问题。

({utf8mb3是MySQL中utf8的同义词;为清楚起见,我将使用前者。)

utf8mb3utf8mb4的子集,因此,客户的 bytes 都会很高兴(Emoji除外,后者需要utf8mb4)。当字节到达(或来自)仅声明的列时,将进行检查以确认您没有存储表情符号或某些中文字符,但否则将以最少的麻烦进行操作。

我建议

 ALTER TABLE ... CONVERT TO utf8mb4

是转换表的“正确”方法。但是,它将转换 all varchar / text列。这可能不好...

如果您将转换后的表JOIN转换为未转换的表,那么您将尝试将utf8mb3字符串与utf8mb4字符串进行比较。 MySQL将举手并把所有行从一个转换为另一个。那INDEX不会有用。

所以...请确保至少与JOINs中涉及的所有保持一致。