MySQL字符集选择

1、怎样选择合适的字符集
对MySQL数据库来讲,字符集很重要,由于数据库存储的数据大部分都是各类文字,字符集对数据库的存储,处理性能都会有所影响。mysql

主要考虑一下几方面的因素
1.知足应用支持语言的需求,应用处理各类各样的文字,发布到使用不一样语言的国家或地区,能够选择Unicode字符集,MySQL的话能够选择UTF-8
2.若是应用中涉及已有数据的导入,就要充分考虑数据库字符集对已有数据的兼容性。
假设数据是GBK文字,若是选择其余数据库字符集,就可能致使某些文字没法正确导入的问题。
3.若是数据库须要支持通常是中文,数据量很大,性能要求也很高,能够选择双字节定长编码的中文字符集,好比GBK。
由于相对于UTF-8而言,GBK比较小,每一个汉字只占用2个字节,而UTF-8汉字编码须要3个字节,这样能够减小磁盘I/O,数据库缓存,已经网络传输的时间,从而提升性能。
若是是英文字符,仅有少许汉字字符,那么选择UTF-8更好。
4.若是数据库须要作大量的字符运算,如比较、排序,那么选择定长字符集可能会更好,由于定长字符集的处理速度比变长的快。sql

2、MySQL支持的字符集
MySQL服务器能够支持多种字符集,在同一台服务器,同一个数据库,同一个表均可以指定不一样的字符集。
查看全部可用字符集的命令 show character set;
例如MySQL5.7支持41种能够用字符集
mysql> show character set;
MySQL字符集选择数据库

3、MySQL的字符集包括字符集和校对规则
1.字符集用来定义MySQL存储字符串的方式
2.校对规则用来定义比较字符串的方式。
3.字符集和校对规则是一对多关系
4.每一个字符集至少对应一个校对规则
例如:查看gbk的校对
show collation like 'gbk%';
MySQL字符集选择
校对规则命名约定,它们以字符集名开始,一般包括一个语言名,而且以_ci(大小写不敏感)、_cs(大小写敏感)或者_bin(二元)缓存

4、MySQL字符集的设置
1.MySQL的字符集和校对规则有4个级别的默认设置,服务器级、数据库级、表级、和字段级。
2.服务器字符集和校对规则
默认服务器字符集使用latin1
MySQL字符集选择服务器

能够在my.cnf中设置服务器字符集,设置完重启就生效
[mysqld]
character-set-server=utf8 网络

  1. 查看当前服务器的字符集

mysql> show variables like 'character_set_server';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)ide

4.查看当前服务器的校对规则
mysql> show variables like 'collation_server';
+------------------+-----------------+
| Variable_name | Value |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)性能

注意:建立完数据库要修改字符集,可使用alter db_name character set
可是数据库里面存在数据,就不能将已有的数据按照新的字符集进行存放,因此不能修改数据库字符集直接修改数据的内容。编码

5.链接字符集和校对规则
客户端和服务器的交互操做,MySQL提供了3个不一样的参数:character_set_client,character_set_connection和character_set_result。
分别表明客户端、链接和返回结果的字符集
一般这个3个字符集应该相同的,才能够确保用户写入的数据能够正确读出
能够在my.cnf中设置
[mysql]
default-character-set=utf8
这样服务器启动后,全部链接默认就是使用utf8字符集进行链接的,而不须要在程序中执行set names。code

5、字符集的修改步骤alter database db_name character set = utf8; alter table table_name character set = utf8;

相关文章
相关标签/搜索