欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-06-01 17:12:59
...
背景:很久前用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