2015-04-03

Mysql字符编码转换

研究过一段时间,整理出如下方法:

1.用mysql将需要转码的表导入进来,再用php逐行读取和编码。最后再用语句导入进去。

(1)

  • 数据量过大则可单独导出,如下

https://demo.zjmainstay.cn/php/MysqlDump.class.php

  • 数据小则可用语句直接导出

mysqldump -uroot -p --default-character-set=utf8 -d databasename > createtab.sql

(2)

  • 数据大则用 SplFileObject 类逐条处理

     $log = new SplFileObject($d); 

     foreach( $log as $line ){  

       if(mb_detect_encoding($line ,array('BIG5','UTF-8'))!='UTF-8'){

            $line = mb_convert_encoding($line,'utf-8','BIG5') ;

        }

     }

  • 数据小则直接打开编辑器再转码

(3)

 可用语句执行

$newdir=$_SERVER['DOCUMENT_ROOT'].'/Public/to/'.$table;

$sql="mysql -h{$this->h} -u{$this->u} -p{$this->p} --default-character-set=utf8 {$this->db} < {$newdir}.sql";

var_dump(shell_exec($sql));

2.通过mysqldump配置设置编码,适合于小数据.

比如:latin1->utf8

1、备份数据库

mysqldump --default-character-set=latin1 --create-options=false --set-charset=false -u root -p 数据库名称

>E:\back.sql

2、创建新数据库

CREATE DATABASE 数据库名称 CHARACTER SET utf8 COLLATE utf8_general_ci;

3、导入数据

mysql -u root -p --default-character-set=gbk 数据库名称<E:\back.sql

完