这些查询都给出了我期望的结果:
SELECT sex
FROM ponies
ORDER BY sex COLLATE latin1_swedish_ci ASC
SELECT sex
FROM ponies
ORDER BY CONVERT(sex USING utf8) COLLATE utf8_general_ci ASC
| f |
| f |
| m |
| m |
+---+
但是这个查询给出了不同的结果:
SELECT sex FROM ponies ORDER BY sex ASC
| m |
| m |
| f |
| f |
+---+
以下是配置:
SHOW VARIABLES LIKE 'collation\_%'
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
表格排序为latin1_swedish_ci
。
MySQL服务器是5.5.16。
答案 0 :(得分:1)
排序规则默认值以逐个表的形式存储。有一个服务器设置默认值,但在创建时会应用于表。
要查找特定表的排序规则,请运行以下查询:
SHOW TABLE STATUS LIKE 'ponies'\G
你应该看到这样的输出:
*************************** 1. row ***************************
Name: ponies
Engine: MyISAM
Version: 10
Row_format: Fixed
Rows: 8
Avg_row_length: 20
Data_length: 160
Max_data_length: 5629499534213119
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2012-02-27 10:16:25
Update_time: 2012-02-27 10:17:40
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
您可以在该结果中看到Collation
设置。
您还可以覆盖表格中特定列的排序规则设置。像这样的create table语句将创建一个latin1_swedish_ci
表,其中包含utf8_polish_ci
列:
CREATE TABLE ponies (
sex CHAR(1) COLLATE utf8_polish_ci
) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
查看结果的最佳方法是这样的:
SHOW FULL COLUMNS FROM ponies;
输出:
+-------+---------+----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+---------+----------------+------+-----+---------+-------+---------------------------------+---------+
| sex | char(1) | utf8_polish_ci | YES | | NULL | | select,insert,update,references | |
+-------+---------+----------------+------+-----+---------+-------+---------------------------------+---------+
1 row in set (0.00 sec)
答案 1 :(得分:0)
The documentation表示默认使用不区分大小写的字符比较。我不明白为什么你没有得到那个结果。
该文档还建议使用binary
限定符进行区分大小写的比较。我想知道这会不会影响你的结果?:
SELECT sex FROM ponies ORDER BY BINARY sex ASC
答案 2 :(得分:0)
当sex
为ENUM
时,可以观察到此行为,在这种情况下,它通常按ENUM
定义中的数字位置排序。只有在明确给出排序规则时,才按字母顺序排序。