mysql新建数据库排序规则 MySQL服务器级别的默认字符集和排序规则分别是

文章浏览阅读4.3k次,点赞5次,收藏13次。字符集(character set)可以理解为符号(symbols)与编码(encoding)的集合

MySQL字符集排序规则

字符集(character set)可以理解为符号(symbols)与编码(encoding)的集合,而排序规则(collation)则是指用来比较字符集中所有字符的规则。MySQL支持多种字符集,用于存储数据、比较字符串、以及客户端程序与MySQL服务器之间的通信。MySQL支持在以下五个层级设定字符集:

MySQL支持的字符集 字符集与排序规则

执行下面的命令查看MySQL支持的字符集:

--方法1> SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS;--方法2> SHOW CHARCATER SET;> SHOW CHARACTER SET LIKE 'latin%';+---------+-----------------------------+-------------------+--------+| Charset | Description                 | Default collation | Maxlen |+---------+-----------------------------+-------------------+--------+| latin1  | cp1252 West European        | latin1_swedish_ci |      1 || latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 || latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 || latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |+---------+-----------------------------+-------------------+--------+

每个字符集支持至少一种排序规则。执行下面的命令来查看某个字符集支持的排序规则:

--方法1> SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS  WHERE CHARACTER_SET_NAME LIKE 'utf8';--方法2> SHOW COLLATION WHERE Charset = 'latin1';+-------------------+---------+----+---------+----------+---------+| Collation         | Charset | Id | Default | Compiled | Sortlen |+-------------------+---------+----+---------+----------+---------+| latin1_german1_ci | latin1  |  5 |         | Yes      |       1 || latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 || latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 || latin1_german2_ci | latin1  | 31 |         | Yes      |       2 || latin1_bin        | latin1  | 47 |         | Yes      |       1 || latin1_general_ci | latin1  | 48 |         | Yes      |       1 || latin1_general_cs | latin1  | 49 |         | Yes      |       1 || latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |+-------------------+---------+----+---------+----------+---------+

排序规则具有以下特点:

排序规则的命名

排序规则的名称以它关联的字符集名称开头,加上一个或多个后缀结束。后缀可以指明排序规则支持的语言、以及是否大小写敏感(case sensitive/insensitive)、声调/重音敏感(accent sensitive/insensitive),等等。例如

使用字符集与排序规则 服务器级别的字符集

MySQL服务器级别的默认字符集和排序规则分别是latin1和latin1_swedish_ci。

使用mysqld命令初始化服务器时可以指定字符集和排序规则。

#方法一$ mysqld --character-set-server=utf8#方法二$ mysqld --character-set-server=utf8 --collation-server=utf8_general_ci

如果仅指定了字符集,则会采用默认的排序规则。因此上面两次执行的命令是等价的。

查看当前服务器级别的字符集信息:

> show [global|session] variables like 'character_set_server';> show [global|session] variables like 'collation_server';

如果在使用CREATE DATABASE命令创建数据库时,没有指定字符集和排序规则,则会默认使用服务器级别的字符集和排序规则。

数据库级别的字符集

在创建数据库时指定字符集和排序规则:

> CREATE DATABASE db_name    [[DEFAULT] CHARACTER SET charset_name]    [[DEFAULT] COLLATE collation_name];

修改数据库的字符集和排序规则:

> ALTER DATABASE db_name    [[DEFAULT] CHARACTER SET charset_name]    [[DEFAULT] COLLATE collation_name];

在上面的命令中,中括号表示非必选项。

查看指定数据库的字符集和排序规则:

USE db_name;SELECT @@character_set_database, @@collation_database;

或者

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME       FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';

数据库级别的字符集和排序规则具有以下影响:

表级别的字符集

在创建表时指定字符集和排序规则:

> CREATE TABLE tbl_name (column_list)    [[DEFAULT] CHARACTER SET charset_name]    [COLLATE collation_name]];

修改表的字符集和排序规则:

> ALTER TABLE tbl_name    [[DEFAULT] CHARACTER SET charset_name]    [COLLATE collation_name];

在上面的命令中

如果表中的列没有定义字符集和排序规则,则会使用表级别的字符集和排序规则作为默认值。

列级别的字符集

字符类型的列,比如char、varchar、text等,也可以定义自己的字符集和排序规则。

在创建表时指定列的字符集:

> CREATE TABLE t1(      col1 VARCHAR(5)      CHARACTER SET latin1      COLLATE latin1_german1_ci);

修改列的字符集:

> ALTER TABLE t1 MODIFY      col1 VARCHAR(5)      CHARACTER SET latin1      COLLATE latin1_swedish_ci;

注:如果修改前后的字符集不兼容,可能会丢失数据。

在上面的命令中

字符串级别的字符集

SQL语句SELECT 'string'中,字符串string的默认字符集和排序规则分别由系统变量charcater_set_connection和collation_connection定义。

可以使用introducer(_charset_name)来指定字符串字面常量的字符集和排序规则:

SELECT 'abc';SELECT _latin1'abc';   --指定字符集SELECT _utf8'abc' COLLATE utf8_danish_ci;   --指定字符集和排序规则

同样地

National字符集

标准SQL中定义了NCHAR或者NATIONAL CHAR来作为CHAR类型的列应该使用的预定义的字符集。MySQL使用utf8作为预定义的字符集。

因此,下面的语句是等价的:

SELECT N'some text';SELECT n'some text';SELECT _utf8'some text';

References

【1】Character Sets and Collations in MySQL

原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/470.html

(0)
筱凯筱凯
上一篇 2024 年 7 月 12 日
下一篇 2024 年 7 月 12 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,500M大带宽限量抢购  >>点击进入