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配置文件,修改字符集和字符集校对
[root@ping ~]# egrep "character|collation" /etc/my.cnf character-set-server=utf8 collation-server=utf8_general_ci