MYSQL选择合适字符集

     MYSQL选择合适字符集

1.满足应用支持语言的需求,应该选额unicode字符集,对mysql来说目前是utf-8
2.如果应用中涉及已有数据的导入,就要充分考虑数据库字符集对已有数据的兼容性
3.如果数据库只需要支持一般中文,数据量很大,性能要求也很高,那就应该选择双节定长编码的中文字符集,比如gbk,

相对于utf-8来说,gbk比较小,每个汉字只占2个字节, 而utf-8汉字编码需要3个字节,这样可以减少此磁盘io,数据库

cache,以及网络传输的时间,相反如果主要处理英文字符,仅有少量汉字数据,那么选择utf8更好
4.如果所有客户端程序都支持相同的字符集,应该优先选择该字符集作为数据库字符集,这样可以避免因为字符集转换带来

的性能开销和数据损失

mysql支持很多字符集,在同一台服务器上,同一个数据库甚至同一个表中的不同字段都可以指定使用不同的字符集,相比

oracle等其他数据库管理系统,在同一个数据库只能使用相同字符集,mysql明显有很大的灵活性

show character set;

查看所有可用的字符集的

mysql的字符集包括字符集(character)和校对规则(collaction)两个概念,字符集是用来定义mysql存储字符串的方式

,校对规则是定义了比较字符串的方式,字符集和校对规则是一对多的关系,mysql支持30多种字符集的70多种校对规则

可以使用show collation like 'XXX' 查看字符集对应的校对规则

校对规则约定:它们以其相同的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)、_bin

(二元,即比较基于字符编码的值而与language无关)

查询现有字符集和校对规则的设置

show variables like 'character_set_setver';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_server | utf8  |
+----------------------+-------+
show variables like 'collation_server';
+------------------+-----------------+
| Variable_name    | Value           |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+

更改:

数据库的字符集和校对规则在创建数据库的时候指定,也可以在创建完数据库后通过'alter database' 命令修改,需要注

意的是,如果数据库里已经存在数据,应为修改字符集并不能将已有的数据按照新的字符集进行存放,所以不能通过修改数

据库的字符集的直接修改数据的内容,只能通过需要先将数据导出,经过社当的调整导入后才可完成

1.导出表结构
mysqldump -d --default-character_set=utf8 xxx>xxx.sql
-d 是知道出表结构,--default-character_set表示设置以什么字符集连接
2.手工修改xxx.sql中表结构定义中的字符集为新的字符集
3.确保记录不在更新,导出所有数据记录
mysqldump --quick -t --extended-insert --defalut-character-set=latin(原来使用的字符集) xxx>xxxdata.sql
 
--quick 用以转储大的表,它强制mysqldump从服务器一次一行地检索表中的行,而不是检索所有行,并在输出前将它缓存

到内存中
-t 只导出数据
--extended-insert:使用包括几个values列表的多行insert语法,这样是转储文件更小,重载文件时可以加速插入
4.打开xxxdata.sql,修改‘/*!40101 SET NAMES utf8 */;'虽然是注释行,应该也能生效
5.使用新的字符集创建新的数据库
6.将表结构导入, 然后在导入数据

PS:选择目标字符集的时候, 要注意最好是源字符集的超级,或者确定比 源字符集的字库更大,否则如果目标字符集的字

库小于源字符集的字库,那么目标字符集中不支持的字符导入后变成乱码,丢失一部分数据。例如,GBK字符集的字库大于

GB2312,那么GBK字符集的数据,导入GB2312数据库中,就会丢失GB2312中不支持的那部分汉字的数据

你可能感兴趣的:(MYSQL选择合适字符集)