-
2008-04-18
字符集从latin1转换为utf8的方法 - [Mediawik日志]
MySQL 的编码对很多人来说 … 一直是个相当令人头痛的问题 … 今天所要做的介绍是如何把资料库的资料, 由 latin1 转成 utf8..
一般 .. MySQL 装起来后(用 rpm 安装) ,系统的预设编码是 latin1.
而很多人在安装一些网页的系统时,如 wordpress、LifeType、phpBB … 等等,都会选择 utf8 。
这时 … 系统一样可以正常运作 … 只是当用 phpmyadmin 进入管理资料库时,就会发现 .. 怎么中文字的部分都变成了歪七扭八 ..
或者一些鬼画符的文字。如:????o??…?????·¥???e??eμ·
此现象就是 utf8 的文字以 latin1形式储存,phpmyadmin 以 utf8 的资料读取方式读取 … 读出来的资料就是这种鬼画符…><。
若要解决 phpmyadmin 读出的鬼画符 ... 有三个方法:
1. 进入 phpmyadmin 内一个名为 libraries 的子目录 .. 编辑 select_lang.lib.php. 找到 $mysql_charset_map 这一段下方 ..
'utf-8' => ‘utf8',
把它改成
‘utf-8' => ‘latin1',
然后存档 … 这时候就可以发现原先的鬼画符 … 这时候又都正常了.
2. 把资料库的编码转成 utf8 …
步骤:
a. 把资料库 dump 出来
mysqldump -u xxx -p database > database.sql –default-character-set=latin1
这时候 dump 出来的 database.sql 是 latin1 的档案格式,然而是 utf8 的文字资料,因此这时若用 vi 开档看它 …
还是会发现中文字是鬼画符 … 这时不要被眼前的假象所骗 … 以为自己做错 .. 几接着做下一步骤。
b. 把 dump 出来的 database.sql 下载回去 .. 用 emEditor(网路上可免费下载,是个支援 utf-8 的编辑器)把 database.sql 打开,
它可以正常识别 utf8 的文字 ..用取代的功能,把 latin1 都取代成 utf8 ,之后直接另存新档 .. 这时把档案类型设定储存成 UTF-8。
c. 再把 database-utf8.sql 上传到 server .. 这时我们用 vi 开启它 .. 就可以看见是正常的中文字 .. 这就表示档案没问题啰。
d. 把档案汇入资料库
mysql database < database-utf8.sql -u xxx -p –default-character-set=utf8
如果资料量不是很大 … 那么很快就可以完成这个步骤 .. 这时候若没有错误讯息出现 .. 那么恭喜你 ..
你已经完成了资料库转换的工作了。如果有错误讯息出现 .. 主要有两个情形 ..
a. 文件档内的中文字,用 vi 看是乱码 ..文件档的格式不是 utf-8。
b. 汇入的时候漏掉指定采用 utf8 的资料编码汇入。
以上的作业是在 资料库系统都是处于 latin1 的环境底下,也就是没有在 my.cnf 指定 default-character-set=utf8。3. windows下的方法是:
a、windows系统win下可使用类似如下语句处理。通过命令行进入mysql/bin所在目录。
D:\usr\mysql41\bin>mysqldump -uroot -p --quick --compatible=mysql40 --default-character-set=latin1 --extended-insert=FALSE test2 > d:/zzz.sqltest2是你想导出数据的数据库名,d:\是路径,设置成你希望的路径就行了,zzz.sql是随意命名的文件,名称随意,只要有.sql后缀名就行了。
程序会提示你输入root的用户密码(如果存在密码的话),输入,程序开始导出。500MB的数据2-3分钟就完成了。
第二步,通过phpmyadmin建立一个新库,库名:test ,采集字符集设定为utf8-general-li将备份出来的sql文件导入新数据库。
D:\usr\mysql41\bin>mysql -uroot -p --default-character-set=utf8 test < d:/zzz.sql
这一步花的时间相对较长,200MB数据花了10分钟左右。
完成。。。
通过phpmyadmin查看test数据库时你一定能看到非常令人高兴的中文字体了。今天用MediaWiki的数据库还原的时候出了字符格式的问题,所以搜索了一些转格式的文章,myphpadmin本身默认的是utf的但数据库字符是latin1的所以备份的时候容易出问题,转来转去麻烦死了,升级了MediaWiki后标题都死乱码,最后找了找在sql的执行语句前加一句就搞定了.
database.php中function doQuery中的语句执行前加
function doQuery( $sql ) {
if( $this->bufferResults() ) {
mysql_query("SET NAMES 'utf8'", $this->mConn );
$ret = mysql_query( $sql, $this->mConn );
} else {
$ret = mysql_unbuffered_query( $sql, $this->mConn );
}
return $ret;
}历史上的今天:
博客搬家完毕 2008-04-18qq传文件速度为零 2008-04-18Acer AS4520-7A1G12Mi 笔记本 使用感觉 2008-04-18Acer AS4520-7A1G12Mi 笔记本 购买经历 2008-04-18平淡何尝不是幸福 2008-04-18
收藏到:Del.icio.us







