南方Linux论坛   首页 | 行业 | 下载 | Blog | 桌面应用 | 数据库 | 电子商务 | 文摘 | 网络服务 | 开源 | 系统管理 | 内核代码 | 教程

返回   南方Linux论坛 > Linux 高级应用讨论区 > Linux 数据库专题讨论
注册账号 Blog 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记讨论区已读

发表新主题 回复
 
主题工具 显示模式
旧 2008-10-21, 04:46 PM   #1
TOM
级别:10 | 在线时长:143小时 | 升级还需:22小时级别:10 | 在线时长:143小时 | 升级还需:22小时级别:10 | 在线时长:143小时 | 升级还需:22小时级别:10 | 在线时长:143小时 | 升级还需:22小时
论坛义工
 
注册日期: 2006-07-05
帖子: 477
精华: 0
现金: 1632 金币
资产: 1632 金币
声望: 16 TOM 正向着好的方向发展
帖子 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
TOM 当前离线  
回复时引用此帖
发表新主题 回复


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 
主题工具
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

论坛启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


所有时间均为北京时间。现在的时间是 05:35 AM


vBulletin 3.6.8 Powered by 南方Linux联盟
版权所有 ©2004 - 2009, bbs.linuxunion.net