MySQL 字符集:指定字符集和排序规则

来自Wikioe
Eijux讨论 | 贡献2021年3月28日 (日) 00:45的版本
跳到导航 跳到搜索


字符集和排序规则有四个级别的默认设置:服务器,数据库,表 和 列。


CHARACTER SET”用于指定字符集的子句中。【 “CHARSET”可以用作“CHARACTER SET”的同义词】


字符集问题不仅影响数据存储,还影响 Client 端程序与 MySQL 服务器之间的通信。如果希望 Client 端程序使用与默认字符集不同的字符集与服务器通信,则需要指出哪个字符集。

例如,要使用 utf8 Unicode 字符集,请在连接到服务器后发出以下语句:
SET NAMES 'utf8';

排序规则命名约定

MySQL 排序规则名称遵循以下约定:

  1. 排序规则名称以与其关联的字符集的名称开头,通常后跟一个或多个后缀,以指示其他排序规则特征。例如,“utf8_general_ci”和“latin1_swedish_ci”分别是“utf8”和“latin1”字符集的排序规则。
    binary字符集具有单个排序规则,也称为binary,没有后缀。
  2. 特定于语言的排序规则包括语言名称。例如,“utf8”字符集的“utf8_turkish_ci”和“utf8_hungarian_ci”使用土耳其语和匈牙利语规则分别对字符进行排序。
  3. 排序规则后缀指示排序规则是区分大小写,区分重音还是假名敏感(或其某种组合)还是二进制。下表显示了用于指示这些特性的后缀。


排序规则后缀的含义:

Suffix Meaning
_ai 重音:不敏感(Accent-sensitive)
_as 重音:敏感(Accent-sensitive)
_ci 大小写:不敏感(Case-insensitive)
_cs 大小写:敏感(Case-sensitive)
_bin 二进制(Binary)
  • 对于未指定重音符号敏感性的非二进制排序规则名称,它由区分大小写确定。如果排序规则名称不包含“_ai”或“_as”,则名称中的“_ci”表示“_ai”,名称中的“_cs”表示“_as”。
    例如,“latin1_general_ci”显式不区分大小写,并且隐含不区分重音,而“latin1_general_cs”显式区分大小写,并且隐含区分重音。
  • 对于二进制字符集的二进制排序规则,比较基于数字字节值。对于非二进制字符集的“_bin”排序规则,比较基于数字字符代码值,该值不同于多字节字符的字节值。
  • Unicode 字符集的排序规则名称可以包括版本号,以指示排序规则所基于的 Unicode 排序规则算法(UCA)的版本。名称中没有版本号的基于 UCA 的归类使用版本 4.0.0 UCA 配重键。
    例如:
    utf8_unicode_520_ci:基于 UCA 5.2.0 配重键(http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt)。
    utf8_unicode_ci(未命名版本):基于 UCA 4.0.0 重量键(http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt)。
  • 对于 Unicode 字符集,“xxx_general_mysql500_ci”排序规则保留原始“xxx_general_ci”排序规则在 5.1.24 之前的顺序,并允许升级在 MySQL 5.1.24 之前创建的表(错误#27877)。

服务器字符集和排序规则

数据库字符集和排序规则

表字符集和排序规则

列字符集和排序规则

字符串常量字符集和排序规则

国家字符集

字符集简介

字符集和排序规则分配的示例

与其他 DBMS 的兼容性