《MySQL入门教程》第28篇字符集与排序规则

本文介绍了MySQL的CharacterSet和校对规则,它们决定了系统支持的字符数据及其存储方式,并介绍了各种字符的比较和排序结果。
MySQL服务器、数据库、表、字符类型字段和字符串常量都可以指定字符集和排序规则。
字符集定义了可以存储的字符类型,例如ASCII、GB2312或Unicode。
排序规则定义字符排序和比较顺序,包括大写和重音符号。
MySQL支持多种字符集。
您可以使用SHOWCHARACTERSET命令查看所有字符集。
从MySQL8.0开始,默认字符集更改为utf8mb4。
单个字符最多占用4个字节,用于存储表情符号。
默认排序规则为utf8mb4_0900_ai_ci。
MySQLServer支持多级字符集设置,包括服务器、数据库、表、字段和字符串常量。
SHOW命令确认当前设置。
例如,Character_set_server表示全局默认字符集,可以在配置文件中或启动时设置,也可以在运行时动态修改。
数据库和表的字符集设置会影响字段和字符串常量。
如果未指定,则默认使用全局字符集和排序规则。
使用SHOWCREATEDATABASE或information_schema.schemata视图查看数据库设置,使用SHOWCREATEDABLE或information_schema.table视图查看表设置。
字段的字符集和排序规则优先于表设置,后者会覆盖数据库设置。
MySQL中的字符串常量有一个字符集和排序规则,如果没有指定,则有一个默认的连接字符集。
字符集和排序规则影响MySQL字符函数。
例如,LENGTH返回以字节为单位的长度,CONVERT实现数据到另一个字符集的转换。
客户端字符集通过连接参数设置,以确保与服务器的一致性,避免转换问题。
系统变量Character_set_system用于存储元数据字符集,Character_set_filesystem用于文件系统字符集解析,Character_sets_dir表示字符集存储目录。
SQL标准提供了NATIONALCHAR和NATIONALVARCHAR字符串类型,并以utf8字符集作为预定义字符集。
N'literal'表示国家字符集中的字符串常量。
每个MySQL字符集都支持定义字符比较规则的多种排序规则,包括大小写和重音符号。
MySQL的默认排序规则是不区分重音和大小写的,可以通过区分重音和大小写的规则来更改。
可以设置不同级别的排序规则。
如果未指定,将使用默认规则。
排序规则包含字符集信息,通常字符集也是根据设置来设置的。
例如,使用utf8mb4_0900_ai_ci创建表意味着使用utf8mb4字符集和特定排序规则。
对于中文排序,MySQL默认规则是按部首排序,但你可以将排序规则更改为按拼或笔画排序。
要实现特定的排序规则,例如拼音排序,需要使用GBK和转换为其他字符集,如:

mysql中的collate是什么?

在MySQL中,COLLATE关键字用于设置影响字符串排序和比较的字符集或排序规则。
创建表时,可以使用COLLATE指定列的排序规则。
例如,在上面的示例中,Name列使用utf8_general_ci排序规则。
utf8_general_ci是不区分大小写的排序规则,忽略大小写差异。
您还可以通过在查询中使用COLLATE来指定排序规则。
例如,此查询根据名称列上的utf8_general_ci排序规则进行排序:您还可以使用COLLATE设置数据库级排序规则。
使用SET命令设置数据库的默认排序规则。
示例:设置数据库默认排序规则为utf8_general_ci。
如果创建表时未指定列排序规则,则使用数据库的默认排序规则。
综上所述,COLLATE在MySQL中起着核心作用,用于定义字符集或排序规则,从而影响字符串排序和比较的过程。

五种主流数据库:从无序到有序

SQL查询不保证返回结果的顺序。
如果需要按照规则对结果进行排序,例如按照工资从高到低排序,则必须使用ORDERBY子句。
本文比较了五种主要数据库(MySQL、Oracle、SQLServer、PostgreSQL、SQLite)查询结果排序的实现和差异。
基于值排序对字段进行排序称为单列排序。
语法如下:搜索时,使用ORDERBY子句指定顺序,ASC表示升序,DESC表示降序,默认为升序。
示例:查找某公司的女性员工,并按月薪从高到低排序。
多列排序涉及对多个字段值进行排序,以逗号分隔。
首先按第一个字段排序,以此类推,如果数据相同,则按第二个字段排序。
示例:查找销售部门员工信息,按月薪从高到低排序,月薪相同则按入职日期排序。
基于表达式的排序允许根据表达式的值进行排序。
示例:查找行政部门的员工,按年总收入排序,即年薪加奖金。
或者,可以使用SELECT列表中字段或表达式的位置来指定数据的顺序。
空值的排序位置因数据库而异。
MySQL、SQLServer和SQLite首先对空值进行排序,Oracle和PostgreSQL最后对空值进行排序。
Oracle、PostgreSQL和SQLite支持使用NULLSFIRST或NULLSLAST关键字来调整null值的排序位置。
创建数据库或表时,通常需要指定字符集和排序规则。
字符集定义了可以存储的字符类型,排序规则定义了字符的排序顺序,包括大小写和重音。
中文订购通常需要拼音、部首或笔画。
使用支持中文排序的字符集和规则,例如Oracle默认的AL32UTF8字符编码和中文部首排序。
您可以使用系统函数来实现其他排序方法,例如按拼音排序。
MySQL8.0默认使用utf8mb4字符编码,汉字也是按部首排序。
利用系统函数实现其他排序方式,如拼音排序等。
SQLServer是基于操作系统默认的区域设置,中国的汉字是按部首排序的。
COLLATE关键字可用于调整排序规则,例如拼音排序。
PostgreSQL默认使用UTF-8编码。
SQLite默认采用UTF-8编码,中文按部首排序,不支持其他排序方式。