MySQL 字符集与大小写敏感性解析

MySQL 字符集与大小写敏感性解析

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

在 MySQL 中,utf8 不支持部分 Emoji,而 utf8mb4 支持。默认的 utf8_general_ci 和 utf8mb4_general_ci 排序规则不区分大小写。要实现大小写敏感查询,可以修改排序规则或使用 BINARY 关键字。在 ThinkPHP 中,可通过 whereRaw 方法执行原生查询以确保大小写敏感匹配。

🎯

关键要点

  • MySQL 中的 utf8 不支持部分 Emoji,而 utf8mb4 支持。

  • utf8_general_ci 和 utf8mb4_general_ci 默认不区分大小写。

  • 要实现大小写敏感查询,可以修改排序规则或使用 BINARY 关键字。

  • utf8 是 MySQL 早期的 UTF-8 实现,最多支持 3 字节。

  • utf8mb4 是 MySQL 5.5+ 版本推荐的 UTF-8 编码,最多支持 4 字节。

  • 常见的排序规则包括 utf8_general_ci、utf8mb4_general_ci(不区分大小写)和 utf8_bin、utf8mb4_bin(区分大小写)。

  • 使用 LIKE 或 = 进行查询时,默认是不区分大小写。

  • 可以通过修改排序规则来实现区分大小写的查询。

  • 在 ThinkPHP 中,使用 whereRaw 方法可以执行原生查询以确保大小写敏感匹配。

🔎

延伸解读

字符集选择的重要性

在 MySQL 中选择合适的字符集至关重要。utf8mb4 是推荐的字符集,因为它支持所有 Unicode 字符,包括 Emoji,而 utf8 则无法存储部分 Emoji。对于需要处理多种语言或特殊字符的应用,使用 utf8mb4 可以避免数据丢失和兼容性问题。

大小写敏感查询的实现

默认情况下,MySQL 的 utf8_general_ci 和 utf8mb4_general_ci 排序规则是不区分大小写的。如果需要进行大小写敏感的查询,可以通过修改排序规则或使用 BINARY 关键字来实现。这对于需要精确匹配的场景尤为重要,尤其是在用户身份验证等安全性要求较高的应用中。

ThinkPHP 中的查询技巧

在 ThinkPHP 框架中,默认的查询方法不支持大小写敏感匹配。开发者可以使用 whereRaw 方法执行原生 SQL 查询,以确保大小写敏感性。这种灵活性使得开发者能够更好地控制数据库查询的行为,满足特定的业务需求。

延伸问答

MySQL 中 utf8 和 utf8mb4 有什么区别?

utf8 是 MySQL 早期的 UTF-8 实现,最多支持 3 字节,无法存储部分 Emoji;而 utf8mb4 是推荐的 UTF-8 编码,最多支持 4 字节,能够完整存储所有 Unicode 字符。

如何在 MySQL 中实现大小写敏感的查询?

可以通过修改排序规则或使用 BINARY 关键字来实现大小写敏感的查询。

在 ThinkPHP 中如何确保大小写敏感匹配?

在 ThinkPHP 中,可以使用 whereRaw 方法执行原生查询,以确保大小写敏感匹配。

MySQL 的默认排序规则是什么?

MySQL 的默认排序规则是 utf8_general_ci 和 utf8mb4_general_ci,这些规则在搜索时是不区分大小写的。

使用 LIKE 查询时,MySQL 默认是大小写敏感还是不敏感?

使用 LIKE 查询时,MySQL 默认是不区分大小写的。

如何修改 MySQL 表的排序规则以实现大小写敏感?

可以使用 ALTER TABLE 语句修改表的排序规则,例如:ALTER TABLE users MODIFY username VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

🏷️

标签

➡️

继续阅读