SQL排序规则决定字符串比较和排序行为,影响大小写敏感性、重音处理等,需在数据库、列或查询层级合理设置,并注意跨表操作时的冲突解决。

SQL排序规则(Collation)决定字符串如何比较和排序,它直接影响查询结果的顺序、大小写敏感性、重音处理等。设置排序规则不是简单加个关键词,而是要理解它在数据库层级、列层级或查询层级的作用机制。
数据库和列级别的排序规则设置
创建数据库时可指定默认排序规则,后续新建的字符类型列若不单独声明,就继承该规则:
- MySQL示例:CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- SQL Server示例:CREATE DATABASE mydb COLLATE Latin1_General_CI_AS;
- 定义字段时也可覆盖默认规则,比如让某列区分大小写:name VARCHAR(50) COLLATE utf8mb4_bin(MySQL)或 name NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CS_AS(SQL Server)
查询中临时指定排序规则
无需修改表结构,可在ORDER BY或WHERE子句中用COLLATE临时切换规则:
- MySQL:SELECT * FROM users ORDER BY name COLLATE utf8mb4_general_ci;
- SQL Server:SELECT * FROM products WHERE title COLLATE Latin1_General_CI_AI LIKE '%café%';
- 注意:COLLATE只能用于字符类型表达式,数值或日期字段不支持;不同排序规则间做JOIN或比较可能触发隐式转换警告甚至报错
常见排序规则后缀含义要记牢
后缀组合反映行为特征,看懂才能选对:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~