MySQL字符集和校对规则

Posted 子抹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL字符集和校对规则相关的知识,希望对你有一定的参考价值。

一、字符集

字符集:就是一对文字符号及其编码比较的集合

二、常用字符集:

ASCII:主要用于显示英语和其他西欧语言。长度为一个字节
UTF-8:互联网广泛支持的Unicode字符集,长度为一到四个字节
GBK:主要用于显示汉字,长度为二个字节

三、查看mysql的字符集和校对规则

1.查看MySQL服务器的字符集

show charsetset/character set 

2.查看字符集的校对规则

show collation;

3.查看当前数据库的字符集

mysql> show variables like ‘character_%‘;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

/* 变化名说明:
character_set_client:    客户端输入数据的字符集
character_set_connection:客户机/服务器连接的字符集
character_set_database:  默认数据库的字符集
character_set_results:结果集,返回给客户端的字符集
扩展:
set names 修改的是client、connection、results三个的字符集,只支持当前会话,当前会话退出,set names 设置的字符集会失效
 */

4.查看当前数据库的校对规则

mysql> show variables like ‘collation_%‘;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

/* collation_connection:当前连接的字符集
collation_database:当前日期的默认校对。每次用USE语句来“跳转”到另一个数据库的时候,这个变量的值就会改变。如果没有当前数据库,这个变量的值就是collation_server变量的值
collation_server:服务器的默认校对

排序方式的命名规则为:字符集名字_语言_后缀,其中各个典型后缀的含义如下:
1._ci:不区分大小写的排序方式
2._cs:区分大小写的排序方式
3._bin:二进制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言
 */

5.校对规则案例

1.创建cloud数据库

mysql> create database cloud;
Query OK, 1 row affected (0.00 sec)

2.创建表t1_ci和t2_bin,并指定字符集和校对规则

mysql> create table t1_ci(name char(2))charset=utf8 collate=utf8_general_ci;
mysql> create table t2_bin(name char(2))charset=utf8 collate=utf8_bin;

3.给表中插入记录

mysql> insert into t1_ci values(‘a‘),(‘b‘),(‘A‘),(‘B‘);
mysql> insert into t2_bin values(‘a‘),(‘b‘),(‘A‘),(‘B‘);

4.查看两表数据并排序

mysql> select * from t2_bin order by name;
+------+
| name |
+------+
| A |
| B |
| a |
| b |
+------+
4 rows in set (0.00 sec)

mysql> select * from t1_ci order by name;
+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
4 rows in set (0.00 sec)
-- 结果说明以ci结果的校对规则不区分大小写的排序,故而使用

四、配置文件修改字符集

1.更改MySQL配置文件,修改字符集和字符集校对

[[email protected] ~]# egrep "character|collation" /etc/my.cnf
character-set-server=utf8
collation-server=utf8_general_ci

  

以上是关于MySQL字符集和校对规则的主要内容,如果未能解决你的问题,请参考以下文章

详细讲解MySQL的字符集与排序规则/校对规则(charactercollate)

详细讲解MySQL的字符集与排序规则/校对规则(charactercollate)

详细讲解MySQL的字符集与排序规则/校对规则(charactercollate)

详细讲解MySQL的字符集与排序规则/校对规则(charactercollate)

详细讲解MySQL的字符集与排序规则/校对规则(charactercollate)

MySQL:校对规则