MySQL SELECT * 在 Unicode 上失败

标签 mysql sql mysql-workbench

背景信息:我有一张 country_types 表。字符集设置为 utf8mb4,排序规则设置为 utf8mb4_0900_ai_ci。

当我运行 SELECT * FROM DB.country_types; 时,我得到以下信息:

Result of: SELECT * FROM DB.country_types in MySQL Workbench

但是,如您所见,条目号 29 丢失了。当我过滤到条目 29 时,它会显示条目 29,尽管 SELECT * 语句没有选择条目 29。

Result of: Filter for entry 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/

相关文章:

mysql - UPDATE + SET + WHERE - 动态最小值

mysql - 如何在 SQL 中的特定列中获取中间值

python - InternalError : (1366, u“整数值不正确:选择)错误

mysql - 选择给定日期间隔内的日期

c# - 客户端和服务器数据库均需要更新(MYSQL、ASP.NET、C#.NET)

mysql - 如何在单个查询中选择两个计数?

mysql转储: Got error: 1017: Can't find file: './access.frm' (errno: 13) when using LOCK TABLES

sql - 如何将 bigint 字段格式化为 Postgresql 中的日期?

java - 优化循环更新请求

从 MySQL 工作台文件导入时出现 MySQL 外键约束问题