发现 MySQL 列的排序规则

Posted

技术标签:

【中文标题】发现 MySQL 列的排序规则【英文标题】:Discover collation of a MySQL column 【发布时间】:2011-11-28 20:46:49 【问题描述】:

我之前创建了一个 mysql 表,现在我想了解某些字段使用的排序规则。我可以使用哪些 SQL 或 MySQL 命令来发现这一点?

【问题讨论】:

【参考方案1】:

您可以使用SHOW FULL COLUMNS FROM tablename,它返回一个列Collat​​ion,例如对于在“name”列上具有特殊排序规则的表“accounts”

mysql> SHOW FULL COLUMNS FROM accounts;
+----------+--------------+-------------------+------+-----+---------+----------+
| Field    | Type         | Collation         | Null | Key | Default | Extra    |
+----------+--------------+-------------------+------+-----+---------+----------|
| id       | int(11)      | NULL              | NO   | PRI | NULL    | auto_inc |
| name     | varchar(255) | utf8_bin          | YES  |     | NULL    |          |
| email    | varchar(255) | latin1_swedish_ci | YES  |     | NULL    |          |
...

或者您可以使用SHOW CREATE TABLE tablename,这将导致如下语句

mysql> SHOW CREATE TABLE accounts;
CREATE TABLE `accounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
...

【讨论】:

仅供参考,如果与表默认值不同,SHOW CREATE TABLE 仅显示列 SET 和 COLLATE。此外,如果与 db 默认值相同,则不会显示表默认值。【参考方案2】:

如果您只想要特定列的排序规则(可能与子查询一起使用)...

SELECT COLLATION_NAME
FROM information_schema.columns
WHERE TABLE_SCHEMA = 'tableschemaname'
AND TABLE_NAME = 'tablename'
AND COLUMN_NAME = 'fieldname';

【讨论】:

【参考方案3】:

SHOW CREATE TABLE [tablename] 将显示每列的排序规则以及默认排序规则。

【讨论】:

SHOW CREATE TABLE 不在我的 MySQL 5.7 DB 上执行此操作。

以上是关于发现 MySQL 列的排序规则的主要内容,如果未能解决你的问题,请参考以下文章

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

在 SQL 2005 中更改聚集索引列的排序规则

mysql设置字段的排序规则对大小写敏感

Mysql 表排序规则改变

如何使用 SQL 设置列的排序规则?

同一个 MariaDB 列的多个排序规则?