[实践OK]如何把早期bo
背景:很久前用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 |