码迷,mamicode.com
首页 > 数据库 > 详细

mysql编码问题总结

时间:2015-08-02 23:11:34      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

网上查了一些mysql编码相关的资料,在这里整理下,不对的地方欢迎各位批评指正。

 

1. mysql字符集相关的变量:

- character_set_server:默认的内部操作字符集

– character_set_client:客户端来源数据使用的字符集

– character_set_connection:连接层字符集

– character_set_results:查询结果字符集

– character_set_database:当前选中数据库的默认字符集

– character_set_system:系统元数据(字段名等)字符集

– 还有以collation_开头的同上面对应的变量,用来描述字符序。

 

2. mysql提供了不同粒度的字符集控制:

控制粒度 查看字符集
连接(connection)
character_set_connection
字段(field) show full fields from TableName
表(table) show create table TableName
数据库(database) character_set_database 或 show create database DataBaseName
mysql服务器(server) character_set_server

在创建数据库、表、字段的时候,各个粒度上的字符集都是可以指定的,也可以不指定,这样的话就使用上一级默认的字符集。

下面分别看看创建数据库、表、字段时对字符集的控制。

 

3.1 创建数据库

(1)查看当前系统server字符集是latin1

技术分享

(2)创建数据库(不指定编码)

可以看到新创建的数据库的字符集和server的字符集相同

技术分享

(3)指定数据库字符集

新创建的数据库字符集和server字符集并不相同,而是使用了自己的字符集utf8

技术分享

(4)修改server的字符集为utf8

技术分享

(5)再次使用默认字符集创建数据库

新的数据库使用了和server相同的编码

技术分享

 

3.2 创建表

(1)当前字符集设置

数据库编码为latin1

技术分享

(2) 创建表

name字段指定了字符集为uft8, address字段采用默认设置

技术分享

技术分享

(3) 插入中文测试

可以看到,采用name字段正常显示,address字段出现了乱码

技术分享

 

4. 实践建议

实践当中,建议创建数据库的时候就指定好db的字符集,如下:

create database testdb default charset utf8

之后创建表、字段的时候可以不指定字符集,默认集成db的字符集设定。

当然db创建好之后也可以修改db的编码:

ALTER DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

修改表的编码:ALTER TABLE test DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

修改字段的编码:  ALTER TABLE test CHANGE address address VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

修改了address字段的编码,原先的数据仍然不能正常显示,因为之前插入数据的时候,客户端传入的是utf8格式,存在latin1无法编码的字符,数据在

进程字符集转换的时候出现了损坏,查询的时候已经无法得到完整的插入时的数据了

但是新插入的中文数据可以正常显示

 

技术分享

 

参考:

mysql 更改库表字段的编码

mysql 字符集设置

 

mysql编码问题总结

标签:

原文地址:http://www.cnblogs.com/undefinedz/p/4696760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!