把DH主机上的mysql字符集倒腾为utf8

原创 2007年09月14日 02:40:00
转贴:http://groups.google.com/group/fwolf-blog/msg/d3028249e819c1f8

很久没有倒腾过mysql的字符集了,都疏忽了,以致于为LP安装Dreamhost上主机的时候,居然没有修改mysql数据库的字符集。也是由于mysql

这东西,即使字符集设置错了,也是吃啥吐啥,拿错误的字符集就往数据库里存,所以外面根本看不出来。今天给LP写了个自动备份脚本,才发现导出的sql中全是乱码,岂能容忍?遂解决之~

首先还是放松了警惕,走了个弯路,我习惯使用的dump脚本是:

mysqldump --add-drop-table --default-character-set=utf8 -h
mysql.mydomain.com --user=fwolf --password=mypasswd
--extended-insert=false fwolf_db > mydomain.com_db.sql

可是dump出来的sql一看中文全是乱码,于是去掉--default-character-set=utf8
再dump,数据依旧,一时没想过来,用iconv把dump出来的sql左转换右转换怎么也是不对,后来才想明白,DH上mysql字符集的默认设置是这样的:

mysql> show variables where variable_name like 'char%';
+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| character_set_client     | latin1                                     |
| character_set_connection | latin1                                     |
| character_set_database   | latin1                                       |
| character_set_filesystem | binary                                     |
| character_set_results    | latin1                                     |
| character_set_server     | latin1                                     |
| character_set_system     | utf8                                       |
| character_sets_dir       | /data/mysql/ovadilla/share/mysql/charsets/ |
+--------------------------+--------------------------------------------+
8 rows in set (0.00 sec)

数据库服务器字符集是latin1,也就是mysql默认的latin1_swedish_ci,而系统的默认字符集则是utf8,所以不带
--default-character-set=utf8
参数dump的数据的时候,其实和带上这个参数是一样的!想通这个问题,又知道了mysql吃啥吐啥的特性之后,解决方法就简单了,记住如果WordPress和mysql都是默认设置的情况下,如果你能夠正常浏览中文,则说明配置就是错误的,因为WordPress默认也不是utf8字符集的。

首先,按latin1字符集导出sql:

mysqldump --add-drop-table --default-character-set=latin1 -h
mysql.mydomain.com --user=fwolf --password=mypasswd
--extended-insert=false fwolf_db > mydomain.com_db.sql

这样导出的sql中的中文应该都是正确的了,现在修改导出的sql文件,把其中的latin1全部替换为utf8,然后再重新导入数据库,导入的时候强制指定字符集为utf8:

mysql --default-character-set=utf8 fwolf_db -h mysql.mydomain.com -u
fwolf -pmypasswd < mydomain.com_db.sql

这样,如果直接用mysql查询数据的话,如果不使用set names 'utf8'
,中文应该是乱码的,而如果你的数据库字符集仍然是默认的latin1的话,会是相反的情况:不使用set names 'utf8'
,中文正常,使用之后反而乱码。确认数据库字符集调整正确之后,再来搞定WordPress,这个就简单多了,编辑文件WP/wp-includes/wp-
db.php,大概66行,在$this->select($dbname);前面,加上:

$this->query('set names utf8');

这样就全部搞定了,数据库和Wordpress的字符集全部调整为万国码utf8。

参考:

   - 搬往 dreamhost 中文变乱码<http://joyus.org/blog/2006/07/move-to-dreamhost.html>
   - PHP 存取 MySQL 乱码问题 <http://9458398.cn/tag/%E4%B9%B1%E7%A0%81+sql/>
   - MySQL 的数据库转换问题 <https://dream4ever.org/archive/t-149238.html>
   - MySQL 內 latin1 編碼儲存的 utf8 編碼資料轉 utf8
編碼儲存<http://phpbb-tw.net/phpbb/viewtopic.php?t=47299>

PS1: DH主机ssh、svn、cron、php-cli、fsocketopen什么的全部支持,太爽了,怪不得那么多人喜爱,就是ssh的速度慢了些。

PS2:
一个和mysql吃啥吐啥有关的笑话,不太雅:你来到医院,向医生说:我近来很不正常,吃什么拉什么,吃黄豆拉黄豆,吃西瓜拉西瓜,你问医生怎样才能恢复正常,医生沉默了一阵说:你吃屎吧!

Source:http://www.fwolf.com/blog/post/310

Linux下MySQL5.6的修改字符集编码为UTF8

http://www.2cto.com/database/201311/255324.html
  • u012307002
  • u012307002
  • 2014年09月27日 22:41
  • 1040

mysql字符编码问题latin1到utf8

测试目的: java从mysql读取数据并打印 测试环境1 a. hadoop集群某节点的环境是utf8,java代码也是utf8编码 b. 需要读取的mysql服,数据库、数据表均是latin1 ...
  • u011747443
  • u011747443
  • 2015年12月09日 13:18
  • 3614

mac下修改mysql默认字符集为utf8

1、首先检查默认安装的字符集 mysql> show variables like '%char%'; +--------------------------+-------------------...
  • u012959829
  • u012959829
  • 2015年03月30日 11:08
  • 3988

关于MYSQL在UTF-8字符集下乱码的解决办法

from http://www.itxx.com.cn/data/mysql/data_1969.html 怎样解决MYSQL数据库在UTF-8字符集下乱码?经常会有人遇到这样的问题,MYSQL数据...
  • leehwi
  • leehwi
  • 2014年03月30日 22:45
  • 1403

修改mysql数据库字符集为UTF8

一、修改my.ini配置文件(mysql配置文件) character_set_server = utf8 #设置字符集 重启mysql数据库服务 查看当前数据库字符集 show VARIABL...
  • u010969226
  • u010969226
  • 2015年03月09日 14:25
  • 9985

杂(一些笔试时候不会的题)

黑盒测试方法包括:等价类划分、边界值分析、因果图分析、错误推测法、功能图分析等。 按位与运算符(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果...
  • clerk0324
  • clerk0324
  • 2012年06月26日 13:31
  • 443

vmware 下ubuntu共享主机文件

1.在vmvare中的菜单栏vm下选择安装vm-tools;然后打开
  • fengzijinliang
  • fengzijinliang
  • 2014年09月11日 14:03
  • 384

debian下mysql的字符串修改为utf8, utf8mb4

导入一个数据库的时候查询的汉字编码为??? 于是 #mysql -uroot -p # mysql> show variables like 'character_set_%'; +---------...
  • rainysia
  • rainysia
  • 2012年03月18日 14:30
  • 2810

PHP Mysql 字符集及中文乱码问题

MySQL中的字符集转换过程 1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection; 2. 进行内部操...
  • zzy2011266
  • zzy2011266
  • 2014年12月30日 21:28
  • 1517

查看mysql数据库字符集,设置mysql字符集为utf8

一、查看 MySQL 数据库服务器和数据库字符集。 mysql> show variables like '%char%'; +--------------------------+-----...
  • dai451954706
  • dai451954706
  • 2013年11月22日 12:13
  • 820
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:把DH主机上的mysql字符集倒腾为utf8
举报原因:
原因补充:

(最多只允许输入30个字)