##字符集概述
字符集是一套符号和编码的规则,不论是在
Oracle
数据库还是在MySQL
数据库,都存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,在应用开始阶段,就按照需求正确的选择合适的字符集,避免后期不必要的调整。
自己的理解:比如说我们输入一个汉字「汉」,用了
UTF8
这种字符集,那么在UTF8这种字符集里面就有「汉」对应的四个字节表示的二进制,计算机是能够识别这些二进制的,但是不能够识别汉字,因此就有了字符集。(汉字有那么多,想想这个工作量还挺大的)
字符集有很多种,我比较熟悉的有
ASCII
,LATIN1
,GBK
,UTF8
等ASCII
码用一个字节来表示字符,因此可以表示的字符非常有限GBK
字符集:支持中文UTF8
字符集:Unicode
字符集的一种,是计算机科学领域里的一项业界标准
##MySQL
支持的字符集
MySQL
服务器可以支持多种字符集,我们可以通过下面命令查看
|
|
MySQL
在同一台服务器,同一个数据库,甚至同一表的不同字段都可以指定使用不同的字符集,相比Oracle
等其他数据库管理系统,在同一个数据库只能使用相同的字符集,MySQL
明显存在更大的灵活性。MySQL
字符集包括字符集和校队规则两个概念。字符集是用来定义MySQL
存储字符串的方式,校对规则是定义了比较字符串的方式「大小写」。字符集和校对规则是一对多的关系。
可以通过下面的命令查看某个字符集对应的校对规则
|
|
校对规则特征
1.每个字符集都会有一个默认的校对规则
2.两个不同的字符集不能有相同的校对规则
3.校对规则命名约定:以相关的字符集名开始,中间包括一个语言名,并且以_ci
「大小写不敏感」、_cs
「大小写敏感」或_bin
「二元」
从上图中可以看到UTF8的默认校对规则是utf8_general_ci
##选择合适的字符集
建议在能够完全满足应用的前提下,尽量使用小的字符集。因为更小的字符集意味着能够节省空间、减少网络传输字节数,同时由于存储空间的较小间接的提高了系统的性能。
有很多字符集可以保存汉字,比如UTF8
、GB2312
、GBK
等。根据应用的需要来选择,GB2312
字库比GBK
字库小,有些偏僻字不能保存。
Unicode
和UTF-8
有何区别,找个一篇很好的文章,点击这里
简单来说Unicode
是「字符集」,为每一个「字符」分配一个唯一的ID(码位);UTF-8
是「编码规则」,将「码位」转换为字节序列的规则「编码/解码 可以理解为 加密/解密 的过程」
##MySQL字符集的设置
MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。
服务器字符集和校对,在MySQL服务启动的时候确定。
可以在my.cnf中设置:
[mysqld]
default-character-set=utf8
或者在启动选项中指定:
mysqld –default-character-set=utf8
或者在编译的时候指定:
./configure –with-charset=utf8现在做的项目是在启动的时候进行配置的
修改数据库字符集
|
|
把默认表的字符集和所有字符列改为新的字符集:
|
|
修改字段的字符集:
|
|