使用 SET NAMES utf8mb4 和 utf8 表
Working with SET NAMES utf8mb4 with utf8 tables
在基于 Mysql 5.5.57 Php 5.6.37 setup
的大型系统中
目前整个系统都在 utf8 中工作,包括在每个数据库连接的开头设置名称 utf8。
我需要在其中一个 table 中支持表情符号,因此我需要将其切换为 utf8mb4。我不想切换其他 tables.
我的问题是 - 如果我为所有连接(utf8 和 utf8mb4)更改为 SET NAMES utf8mb4 并将特定 table 仅切换为 utf8mb4(并且只将 mb4 数据写入此 table) .系统的其余部分会像以前一样工作吗?
在 utf8 tables/data/connections 中使用 SET NAMES utf8mb4 会不会有任何问题?
我认为对所有连接使用 SET NAMES utf8mb4
应该没有问题。
(utf8mb3
是 MySQL 中 utf8
的同义词;为了清楚起见,我将使用前者。)
utf8mb3
是 utf8mb4
的子集,因此您的客户的 字节 无论如何都会很高兴(表情符号除外,它需要 utf8mb4)。当字节到达(或来自)仅声明的列时,将进行检查以验证您没有存储表情符号或某些汉字,否则,它会以最小的麻烦进行。
我建议
ALTER TABLE ... CONVERT TO utf8mb4
作为 'right' 方式转换为 table。但是,它会转换 all varchar/text 列。这个可能不好...
如果您 JOIN
将已转换的 table 转换为未转换的 table,那么您将尝试将 utf8mb3 字符串与 utf8mb4 字符串进行比较。 MySQL 将举手并将所有行从一行转换为另一行。那是没有 INDEX
有用的。
所以...确保至少与 JOINs
.
中涉及的任何 列 保持一致
在基于 Mysql 5.5.57 Php 5.6.37 setup
的大型系统中目前整个系统都在 utf8 中工作,包括在每个数据库连接的开头设置名称 utf8。
我需要在其中一个 table 中支持表情符号,因此我需要将其切换为 utf8mb4。我不想切换其他 tables.
我的问题是 - 如果我为所有连接(utf8 和 utf8mb4)更改为 SET NAMES utf8mb4 并将特定 table 仅切换为 utf8mb4(并且只将 mb4 数据写入此 table) .系统的其余部分会像以前一样工作吗?
在 utf8 tables/data/connections 中使用 SET NAMES utf8mb4 会不会有任何问题?
我认为对所有连接使用 SET NAMES utf8mb4
应该没有问题。
(utf8mb3
是 MySQL 中 utf8
的同义词;为了清楚起见,我将使用前者。)
utf8mb3
是 utf8mb4
的子集,因此您的客户的 字节 无论如何都会很高兴(表情符号除外,它需要 utf8mb4)。当字节到达(或来自)仅声明的列时,将进行检查以验证您没有存储表情符号或某些汉字,否则,它会以最小的麻烦进行。
我建议
ALTER TABLE ... CONVERT TO utf8mb4
作为 'right' 方式转换为 table。但是,它会转换 all varchar/text 列。这个可能不好...
如果您 JOIN
将已转换的 table 转换为未转换的 table,那么您将尝试将 utf8mb3 字符串与 utf8mb4 字符串进行比较。 MySQL 将举手并将所有行从一行转换为另一行。那是没有 INDEX
有用的。
所以...确保至少与 JOINs
.