您的位置:首页 > 数据库 > MySQL

MYSQL字符集与校对规则

2017-06-04 23:49 239 查看

MYSQL字符集与校对规则

一. 字符集与校队规则概述

简单的说字符集就是一套文字符号及编码、比较规则的集合。

目前支持中文的常用的字符集有UTF-8、GBK、GB2312等,MYSQL服务器支持多种字符集,在同一台服务器、同一个数据库或者同一个数据表中的不同字段都可以使用不同的字符集

MYSQL的字符集包括字符集(character)和校队规则(collation)两个概念,其中字符集用来定义mysql中存储字符串的方式,校对规则用来你定义比较字符串的方式,字符集和校对规则是一对多的关系,也就是说一种字符集可以包含多种校队规则,mysql支持30多种字符集的70多种校验规则

mysql的字符集和校对规则有四个级别的默认设置:服务器级、数据库级、数据表级、字段级。它们分别在不同的地方设置,作用也不相同

对于实际的应用程序来说,还存在客户端和服务器之间交互的字符集和校对规则的设置,这就是连接字符集和它的校对规则

一个字符集至少对应着一个校队规则,如果没有设置校队规则,那么mysql会默认使用该字符集的默认校队规则,同样,如果仅仅设置了校队规则而没有选择字符集,那么mysql会使用与设置的校对规则相匹配的字符集

查看mysql支持的字符集

show character set;


查看某个字符集支持的校对规则

show collation like 'gbk%';


二. 设置各种字符集

1. 服务器级

① 设置服务器级字符集与校队规则

可以在my.cnf中设置,会在mysql服务启动的时候确定

[mysqld]
character-set-server=gbk


或者在启动选项中指定

mysqld --character-set-server=gbk


或者在编译时指定(源码安
4000
装mysql)

cmake . --DDEFAULT_CHARSET=gbk


② 查看服务器级的字符集和校队规则

show variables like 'character_set_server';
show variables like 'collation_set_server';


2. 数据库级

数据库的字符集和校对规则可以在创建表的时候指定,也可以创建数据库后通过alter database命令进行修改,如果数据库中已经存在数据,则修改字符集不会对原有记录造成影响,原有的记录依然按照以前的字符集存放

① 在创建数据库时指定字符集和校队规则

CREATE DATABASE IF NOT EXISTS test_dbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;


② 修改已存在的数据库的字符集和校队规则

alter database test_dbname DEFAULT CHARACTER SET utf8  collate utf8_general_ci;


③ 查看数据库字符集和校队规则

show variables like 'character_set_database';
show variables like 'collation_database';


3. 数据表级

表的字符集和校对规则可以在创建表的时候指定,也可以后期通过alter table命令进行修改,如果表中原来已有记录,则修改字符集不会对原有记录造成影响,原有的记录依然按照以前的字符集存放

① 创建数据表时指定字符集

create table test_tablename (
id int not null,
)default charset=utf8;


② 修改数据表的字符集

ALTER TABLE test_tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;


③ 查看数据表的字符集

show create table test_tablename \G;


4. 列字符集和校队规则

mysql可以定义列级别的字符集和校对规则,主要是针对相同的表不同字段需要使用不同的字符集的情况,应该说遇到这种情况的概率比较低,这只是mysql提供给我们一个灵活设置的手段

列字符集可以在创建表时指定,也可以在后期通过修改表来调整,如果在创建表的时候没有指定字符集和校队规则,则默认使用表的字符集和校对规则

① 修改列的字符集

ALTER TABLE test_tablename CHANGE test_title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;


5. 连接字符集和校对规则

上面四种设置方式仅仅是针对于数据在数据库中保存时使用的字符集和校对规则,而对于实际的应用程序来说,还存在客户端和服务器之间交互的字符集和校对规则的设置

对于客户端和服务器的交互操作,mysql提供了三个不同的参数:

character_set_client 、 character_set_connection、character_set_results,分别代表客户端、连接和返回结果的字符集,通常情况下,这三个设置应该是相同的,才可以确保用户写入的数据被正确读出

可以通过一个命令同时设置这三个参数

set NAMES ***;


这个命令可以同时修改这三个参数的值,或者在配置文件my.cnf中设置

“`

[mysql]

default-character-set=gbk

三. 注意事项

① 如果指定了字符集和校对规则,使用指定的字符集和校对规则

如果指定了字符集但没有设置校对规则,使用指定字符集的默认校对规则

如果指定了校对规则但未指定字符集,则字符集使用与该校对规则相关联的字符集

如果没有指定字符集和校对规则,使用数据库默认字符集和校对规则作为表的字符集和校对规则

② 相对于utf8而言,gbk比较小,每个汉字占两个字节,而utf汉字编码则需要三个字节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: