php - 使用 SET NAMES utf8mb4 和 utf8 表

标签 php mysql encoding utf8mb4

在基于Mysql 5.5.57 Php 5.6.37 setup的大型系统中

目前整个系统都在 utf8 中工作,包括在每个数据库连接的开头设置名称 utf8。

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

我的问题是 - 如果我为所有连接(utf8 和 utf8mb4)更改为 SET NAMES utf8mb4 并将特定表仅切换为 utf8mb4(并且仅将 mb4 数据写入该表)。系统的其余部分会像以前一样工作吗?

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

最佳答案

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

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

utf8mb3utf8mb4 的一个子集,因此无论哪种方式,您的客户的 bytes 都会满意(表情符号除外,它需要 utf8mb4)。当字节到达(或来自)仅声明的列时,将进行检查以验证您没有存储表情符号或某些汉字,否则,它会以最小的麻烦通过。

我建议

 ALTER TABLE ... CONVERT TO utf8mb4

作为转换表格的“正确”方式。但是,它会转换所有 varchar/text 列。这可能不好...

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

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

关于php - 使用 SET NAMES utf8mb4 和 utf8 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53118692/

相关文章:

MYSQL根据另一个单元格的值替换一个单元格

php - 如何创建带分页的 'picture gallery'?

html - 如果 HTML5 的默认字符编码是 UTF-8,为什么需要在 HTML5 文档中指定字符编码?

java - 获取字符串 url 并对其进行编码的最佳方法是什么

php - 设置 Cookie 过期日期

php - WAMP - PHP/MySQL - 为什么我的 POST 调用被破坏

javascript - 未定义 require - 创建目录中每个文件的数组

mysql - WSO2 ESB 在与 MySQL 的交易中不回滚

c# - 删除字符串中的 HTML 实体

php - 在MySQL中创建一个 View 表,但从2个表中读取数据