mysql - MySQL 默认使用什么排序规则进行 ORDER BY?

标签 mysql collation

这些查询都给出了我期望的结果:

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。

最佳答案

表格排序规则

排序规则默认值是逐个表存储的。有一个服务器设置的默认值,但该默认值在创建表时应用于表。

要查找特定表的排序规则,请运行以下查询:

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)

您可以在该结果中看到排序规则设置。

列排序规则

您还可以覆盖表中特定列的排序规则设置。像这样的创建表语句将创建一个 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)

关于mysql - MySQL 默认使用什么排序规则进行 ORDER BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470337/

相关文章:

mysql:我想在我的行中包含一个值

php - PHP 中的 MySQLdump,我需要它转储到特定目录中

php - 尝试将图像上传到文件夹并将其位置保存在数据库错误中

mysql - Ubuntu 16.04 无法重建 mySQL

sql-server - Oracle 中与 SQL Server 中的 Latin1_General_BIN 排序规则类型等效的排序规则类型是什么?

Mysql 查询以发现当前默认数据库排序规则(通过命令行客户端)

mysql - 为什么我的 MySQL 实例认为 "' ī"and "i"是相等的字符?

mysql - 分组方式

mysql - 在处理西类牙语字符时,如何在第一个字母等于 'X' 的 mysql 中获取记录?

MySQL 与 utf8_czech_ci 中的 'ch' 匹配