MySQL配置文件my.cnf中的”init_connect”的用法

这两天折腾把一台机器的mysql(3.23.58)库倒到另外一台机器的mysql(5.0.27)库里的工作
而且最要命的是原来的库里的数据中有中文字符!
倒数据的时候倒还顺利
先在原来的库里mysqldump出来数据
然后在新的机器上用iconv转下编码(如果需要的话)
我的情况不需要,因为我的新环境差不多都已经设好了的gbk的编码
在mycnf中设置的有:

[client]
default-character-set=gbk

[mysqld]
default-character-set=gbk

然后用mysql dbname < filename.sql
这样倒入新的库里
数据成功的倒过来了
但是php程序挪过来后还有问题
因为php连mysql数据库,如果不显示的指明用什么编码来设置connection、results的话
缺省用latin1编码来设置其connection和results的属性
每个程序都改,都在连上mysql首先执行一句:

SET NAMES ‘gbk’

?
当然最好的办法是不用动程序咯
于是我找了找
发现从mysql4.1.2开始
配置文件my.cnf里开始支持参数:init_connect
比如:

[mysqld]
init_connect=’SET NAMES gbk’

这样每次连接过来的时候,首先就会去执行”SET NAMES gbk“了
这样就能避免每个php程序都要改
但是这种做法也不是完美无缺的
当拥有SUPER权限的用户连上来的时候,init_connect设定的sql语句是不会被执行的
用户”root”自然拥有SUPER权限
这里的权威文档来自官方
而我们的程序就有是用root连过来的!!!

最后只能想个折衷方案
让用root用户直接连的都改用普通用户连

Discussion Area - Leave a Comment




*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word