mysql4.1和以上版本连接编码的说明

Centos, Ubuntu, Nginx, MySQL, Redis, Mongodb, Docker, ...
发表回复
头像
IOsetting
论坛管理员
论坛管理员
帖子: 3641
注册: 2006-10-17 1:48

mysql4.1和以上版本连接编码的说明

帖子 IOsetting » 2007-11-20 11:57

my.ini没有指定默认格式前(default-character-set=),所有建立的表都为
latin1_general_ci, 转换后虽然不会有什么问题,但latin1_general_ci保存utf8数据可能会留下隐患.

有些用mysql4.0 保存的utf8 时无论程序还是数据库监视文字都没有乱码, 一旦升级mysql4.1或以上版本以后, 程序中看见的就是乱码了.

到mysql 4.1 以后, 程序与数据库格式连接被细分为4层.而很多程序没有考虑到这一点

所以程序在mysql4.1或以上版本的环境就以默认的

character set client latin1
character set connection latin1
character set results latin1

来建立数据连接,所以读出来的就是乱码了

这个问题可以通过my.ini指派一个默认的读写连接来解决
在[mysqld]中增加

default-character-set=utf8
#(指定服务器默认格式为utf8,可以自定其它格式)
#这项指定后 character_set_server , collation_server 会变为你所指定的格式, 所有新建表默认都将以这个格式建立并整理)

character-set-client=utf8
#(指定所有程序连接mysql4.1或以上版本的格式为utf8,可以自定其它格式)
#这项指定后, character set client , character set connection , character set results 会变为你所指定的格式


这样不支持mysql4.1和以上版本判断连接方式的程序就不会出现乱码了

然后到 character_set_database , collation_database 的格式指定,

这两个需要使用脚本或phpmyadmin等工具将表指定为utf8_general_ci或你使用中的其它格式

这个指定在支持判断mysql4.1和以上版本的程序中(例如phpmyadmin2.6.x以上)起到指定格式的关键作用.
包括mysqldump -T page参数也是使用这个指定.

最后是character_set_system,这个是编译mysql时指定, 编译时可以更改为你使用的格式,也可以通过my.ini指定.

发表回复