mysql 中英文如何排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 中英文如何排序相关的知识,希望对你有一定的参考价值。

文本内容的排序其实是按照字符在字符的字典序的,相当于是先是数字,然后是英文字母,英文字母按照a-z的字典序。
对于中文,也是按照字典序排序的,这个汉字字典序可以看作是对应拼音的字典序,其实内部是按照字符集中汉字编码的从小到大顺序,只不过汉字的编码顺序是以拼音的字典序排列的,与拼音字典序的主要不同体现在多音字上,对于一个汉字虽然可以有多个发音,但只有一个内部编码
参考技术A lz能把问题描述清楚些么,这样大家才能帮你解决问题的。
关于mysql中英文排序的问题,有一篇跟帖的谈论还是挺精彩的,供lz参考 http://bbs.csdn.net/topics/290012882

如何找出我的 MySQL 中的默认字符集/排序规则 [重复]

【中文标题】如何找出我的 MySQL 中的默认字符集/排序规则 [重复]【英文标题】:How can I figure out the default charset/collation in my MySQL [duplicate] 【发布时间】:2019-12-28 21:25:15 【问题描述】:

我在 Ubuntu 18.04 上使用 MySQL 和 MySQL Workbench 8.0+。当我创建一个字符串类型的列时,我将字符集/排序规则保留为默认值。在 MySQL 工作台中,它只是告诉我是 Default Charset

我当前的 MySQL 和 Workbench 使用的默认字符集是什么?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

使用SHOW CREATE TABLE。例如:

CREATE TABLE a (
    dflt VARCHAR(11),
    cs   VARCHAR(11)  CHARACTER SET latin1,
    cola VARCHAR(11)  COLLATE utf8mb4_hungarian_ci,
    cc   VARCHAR(11)  CHARACTER SET latin1  COLLATE latin1_bin,
    colb VARCHAR(11)  COLLATE latin1_bin
);

SHOW CREATE TABLE a\G

mysql> SHOW CREATE TABLE a\G
*************************** 1. row ***************************
       Table: a
Create Table: CREATE TABLE `a` (
  `dflt` varchar(11) DEFAULT NULL,
  `cs`   varchar(11) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL,
  `cola` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_hungarian_ci DEFAULT NULL,
  `cc`   varchar(11) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `colb` varchar(11) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

注意事项:

大多数列都有明确的字符集和排序规则。 没有 (dflt) 的那个会从表的 DEFAULTs 继承这些设置。 每个CHARACTER SET 都有一个“默认”排序规则。 每个COLLATE 都与一个CHARACTER SET 相关联,即排序规则名称的第一部分。 (此处未显示):表的DEFAULTs 继承自DATABASE。 如果你什么都不做,MySQL 8 默认为CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci。 旧版本默认为CHARSET=latin1 COLLATE=latin1_swedish_ci 某些排序规则中的“0900”或“520”指的是 Unicode 标准版本 9.0 和 5.20。您可以由此推断,未来可能会有新的、“更好”的排序规则。

【讨论】:

以上是关于mysql 中英文如何排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中控制 UTF-8 排序?

如何在mysql中按值排序

如何避免这个mysql查询的文件排序

如何在mysql查询中获得排序结果?

如何按 mySQL 中新生成的列排序?

如何对 MySql 数据库进行排序?