Maison >base de données >tutoriel mysql >[实践OK]如何把早期bo-blog里latin1的MYSQL编码转换为全utf8编码_MySQL

[实践OK]如何把早期bo-blog里latin1的MYSQL编码转换为全utf8编码_MySQL

WBOY
WBOYoriginal
2016-06-01 13:06:471118parcourir

背景:很久前用bo-blog时的编码是latin编码,但里面存的是utf8格式,出现啥问题?当时是放在虚拟域名机上没有ssh,每次备份出来都是乱码,找bob呢,说是得用帝国备份进行导出,会有自动编码识别功能,确实有这个功能,给我后呢,我通过帝国备份王导入自己的本机vmware机器上的mysql版本是Mysql 5.6.13正常,导入到外网vps机器上的mysql 5.6.19上不正常,显示乱码,于是否,我觉得是编码问题了,对照发现,果然不一样,高版本的mysql默认就全是utf8的:

一)内网vmware测试机上的编码情况(mysql 5.6.13):

mysql> show variables like "%char%";

+--------------------------+----------------------------------+

| Variable_name            | Value                     |

+--------------------------+----------------------------------+

| character_set_client     | latin1                    |

| character_set_connection | latin1                |

| character_set_database   | utf8                   |

| character_set_filesystem | binary                  |

| character_set_results    | latin1                    |

| character_set_server     | latin1                   |

| character_set_system     | latin1                  |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+----------------------------------+

二)Vps的最新版本的mysql如下(mysql 5.6.19):

mysql> show variables like "%char%";

+--------------------------+----------------------------------+

| Variable_name            | Value                     |

+--------------------------+----------------------------------+

| character_set_client     | utf8                      |

| character_set_connection | utf8                  |

| character_set_database   | utf8                   |

| character_set_filesystem | binary                  |

| character_set_results    | utf8                      |

| character_set_server     | utf8                     |

| character_set_system     | utf8                    |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+----------------------------------+

方案一:

目前,对导入正常显示正常的mysql 5.6.13作如下编码规范,操作如下:(-d 表示只导出表结构,不导出数据。 -t是只导出结构。)

1> 以latin1导出表结构和数据(也有分开导出,对latin1作替换其中表结构定义中的字符集为新的字符集utf8):

步骤如下:

(1)这儿一定要是latin1的,否则导出来的是乱码,加入mysqldump参数如下:

sed -i s/CHARSET=latin1/CHARSET=utf8/g `grep -rl "CHARSET=latin1" justwinitData22.sql `

(2)对第1步里export出来里面的表结构定义中的字符集由latin1替换为新的字符集utf8:

/usr/local/webserver/mysql/bin/mysqldump -uroot  --default-character-set=latin1  --no-create-info justwinit_mysql  > justwinitData22.sql

2>使用新的字符集创建新的数据库并导入(导入前得转成utf8格式,editplus或UltraEdit把justwinitData22.sql 另存为utf8格式):

create database justwinit_mysql  default charset utf8;

3>确保在vps高版本导入前的sql里加入一行:set names utf8。(我发现这一行直接在sql的terminal里写再source好像不行,以前好像行的,还得写到sql文本里。)

source /tmp/justwinit/justwinitData22.sql

mysql> source /tmp/justwinit/justwinitData22.sql

导入完毕,中文访问就不乱码了,也就Ok了。EOF

参考:

http://blog.chinaunix.net/uid-25266990-id-3344584.html

方案二:

当然,也可以直接select into,后再load 进去:

步骤一 将待导出的数据表的表结构导出(可以用Phpmyadmin、mysqldump等,很简单就不说了),然后将导出的create table语句的CHARSET=latin1改为CHARSET=utf8,在目标库newdbname中执行该create table语句把表结构建好,接下来开始导出-导入数据

步骤二 命令行:进入mysql命令行下,mysql -hlocalhost -uroot -p*** dbname

步骤三 执行SQL select * from tbname into outfile /usr/local/tbname.sql;

步骤四 将tbname.sql转码为utf-8格式,建议使用UltraEditor,可以直接使用该编辑器的转换->ASCII到UTF-8(Unicode编辑),或者将文件另存为UTF-8(无BOM)格式

步骤五 在mysql命令行下执行语句 set character_set_database=utf8;  注:设置mysql的环境变量,这样mysql在下一步读取sql文件时将以utf8的形式去解释该文件内容

步骤六 在mysql命令行下执行语句 load data infile tbname.sql into table newdbname.tbname;

摘自:http://www.bitsCN.com/database/201102/84121.html

相关中文乱码及文件编码转换成utf8的工具技巧介绍,附录:

(1)中文在linux上用vi和less查看乱码的设置:

在Linux上看utf8的文件,一个是SecureCRT高架,一个是vim的设置::set fileencoding=utf-8。

想用less命令查看的时候,就先执行这个命令,然后再用less查看:

export LESSCHARSET=latin1

这样用less查看的大部分都没问题了,但是存在某些行太长自动换行后乱码的情况。这是因为每个汉字由多个字节组成,在行尾被截断了,下一行都有问题,你需要手工调整一下客户端的宽度就可以了。

想用VI查看的时候,在打开文本之后的VI里进行如下设置:

:set encoding=utf-8 termencoding=latin1

注意那个encoding是要查看文本的编码格式,一般就是服务器默认编码。

摘自:http://www.myexception.cn/linux-unix/1662792.html

(2)linux下如何做编码转换成utf8的办法:

wget http://pkgs.repoforge.org/enca/enca-1.10-1.el6.rf.x86_64.rpm

enca -L zh_CN -x UTF-8 file   #将file转换成utf8的编码格式 也能转成utf8格式:enca-1.10-1.el6.rf.x86_64。

enca的用法:

enca -L zh_CN file    #查看file的编码格式

enca -L zh_CN -x UTF-8 file   #将file转换成utf8的编码格式

enca -L zh_CN -x UTF-8 file1 file2   #转换之后存成file2文件,不覆盖file1

不过用的时候发现有一部分文件无法传转,具体原因不祥,不过enca会把无法转换的文件告诉你的。对于这些不能转的文件,可以用gedit另存为的方式转,虽然这法笨点,但挺好使的。(上面我就是通过editplus别存为转的,UltraEdit也成。)

实践如下:

[root@jackxiang justwinit]# enca -L zh_CN  justwinitData22.sql

Universal transformation format 8 bits; UTF-8

  Surrounded by/intermixed with non-text data

[root@jackxiang justwinit]# enca -L zh_CN  justwinitData21.sql  

Universal transformation format 8 bits; UTF-8

enca实践内容来自:http://zhan.renren.com/itbegin?gid=3602888498000703772&checked=true

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn