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