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用户直接连的都改用普通用户连




