背景信息:我有一张 country_types 表。字符集设置为 utf8mb4,排序规则设置为 utf8mb4_0900_ai_ci。
当我运行 SELECT * FROM DB.country_types;
时,我得到以下信息:
但是,如您所见,条目号 29 丢失了。当我过滤到条目 29 时,它会显示条目 29,尽管 SELECT * 语句没有选择条目 29。
与其他行不同,条目 29 使用特殊的 unicode 字符。我想知道如何解决这个问题,以便在 SELECT 语句中返回条目 29。
最佳答案
When I run
SELECT * FROM DB.country_types
[...], as you can see entry number 29 is missing.
它并没有丢失,只是没有出现在您期望的位置。这不是编码问题。您必须记住,在任何 SQL 数据库中,记录都是无序的,除非指定了 ORDER BY
子句。当没有指定这样的子句时,查询返回的记录的顺序是不可预测的。
如果您希望在 28 和 30 之间始终看到条目 29,您需要在查询中添加一个 ORDER BY
子句,例如:
SELECT * FROM DB.country_types ORDER BY id;
关于MySQL SELECT * 在 Unicode 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57939838/