2008-10-21, 04:46 PM
|
#1
|
|
论坛义工
注册日期: 2006-07-05
帖子: 477
精华: 0
现金: 1632 金币
资产: 1632 金币
声望: 16 
|
MySQL4.0升级5.0之后Big5与UTF-8乱码解决方法
|
最近接 case 的案主想要重灌伺服器,只是想说看重灌之后能不能跑快一点
如果 linux 重灌电脑可以跑快一点的话,那是不是全世界的伺服器都要重灌了?
可见对伺服器的概念还停留在 windows 的阶段,没有把伺服器当作伺服器来看嘛~~
正所谓拿钱手软,要重灌?那就重灌吧!!
其实每每重灌之后,不管是在工作上或是在自修或是其他方面,在资料恢复的时候总会遇到些许的问题,像是 apache -> apache2,Mysql 4.x -> Mysql 5.x,而偏偏网站都是用这些软体,心里想阿~~如果套件版本都不变的化那该有多好阿…XD
我现在遇到的是 Mysql 4.0 -> Mysql 5.0 的问题,事实上之前也碰过 4.0 -> 4.1 还要去执行 mysql_fix_privilege_tables 之类的,不过大家有兴趣的话去 google 找找相关讨论应该也是有滴,这是一只 script,记得去修改内容加入 mysql root 的密码就可以了,题外话就不多说了。
我自己的问题是参考底下的作法来做的,并且将4.0旧的 /etc/mysql/debian.cnf 里面的 password 参数,替换到新的 5.0 的 debian.cnf,不是整个档案替换捏!!不做也是可以,只是启动会有错误讯息而已。
从MySQL4.0升级至5.0。
首先把资料dump出来 。由於先前用4.0时我的资料是存成latin1,不管是Big5或是wordpress的UTF-8存进去后都是变成lantin1,所以dump出来 后要用iconf或piconf把他转成UTF-8,记得dump出来时要加上–default-character-set=latin1
如果原先是Big5的资料,像我的Coppermine Photo Gallery,dump出来后就直接把Big5转成UTF-8即可
#mysqldump -u帐号 -p –default-character-set=latin1 资料库 >output.sql
#piconv -f big5 -t utf8 output.sql >utf8.sql
如果原先是UTF-8的资料,像是wordpress,dump出来后要先转成Big5后,再把他转成UTF-8,因为原先dump出来的是伪装成UTF-8的lantin1不是真正的UTF-8
#mysqldump -u帐号 -p –default-character-set=latin1 资料库 >output.sql
#piconv -f utf8 -t big5 output.sql > big5.sql
#piconv -f big5 -t utf8 big5.sql >utf8.sql
接著MySQL5.0灌好后,MySQL的my.cnf设定档内要加入以下设定
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
但也有看到资料说[mysqld]那边加上 default-character-set=utf8跟 default-collation=utf8_general_ci后,一些旧的使用Big5编码的php程式,又没有加入连资料库时指定的编码方式的 相关code的话,那些程式就会烂掉,所以目前我是没有加上那两行。
接著建立空的资料库准备把dump出来的资料import进去,SQL语法应该类似下面这样,要加上
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
我是用phpMyAdmin建立资料库的,建立时”校对”要选utf8_general_ci
再来就是把刚刚dump出来后的sql档在import进去了,这里有两点要注意的。
1.刚刚dump出来的sql档如果原先是Big5里面会有一些像是许功盖这些字后面会多了一个”\“,记得用文字编辑器把他消掉2.import进去时记得还要先修改一下dump出来的sql档,在最前面加上
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
再来把每个资料表后面的
TYPE=MyISAM;
改成
ENGINE=MyISAM DEFAULT CHARSET=utf8;
都改好后就可以把他import进去了
#mysql -u帐号 -p 资料库 < utf8.sql
不过以上实在有点麻烦,所以我把多余的”/“消掉后,就直接用phpMyAdmin把他import进去了,import时记得文字编码档案要选utf8即可
顺便记一下写php时如是配合UTF-8的资料库的话该注意,在真正送出query前要先加入以下三行
mysql_query(”SET NAMES ‘utf8‘”);
mysql_query(”SET CHARACTER_SET_CLIENT=utf8“);
mysql_query(”SET CHARACTER_SET_RESULTS=utf8“);
检查语系的SQL语法
show variables like “%character%”;
文章来源:linuxnews.idv.tw
|
|
|
|