现在的位置: 首页 > 综合 > 正文

INTO OUTFILE 导出数据乱码解决方案顺便附带INTO OUTFILE中使用变量方法

2013年05月19日 ⁄ 综合 ⁄ 共 866字 ⁄ 字号 评论关闭

直接在命令行中SELECT显示无乱码,但使用 INTO OUTFILE 导出后有乱码,此时必须修改显示乱码的列的字符集

 

表结构及测试数据

CREATE TABLE `tab`(

`id`
INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY,

`name`
VARCHAR(10) NOT NULL,

`
add` VARCHAR(20) CHARACTER SET gbk NOT NULL

)ENGINE
=InnoDB DEFAULT CHARSET=utf8;



INSERT INTO `tab`(`name`,`add`) VALUES

(
'中文', '这列不会乱码'),

(
'汉字', '这列不会乱码');



SELECT * FROM `tab`;



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

| id | name | add |

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

| 1 | 中文 | 这列不会乱码 |

| 2 | 汉字 | 这列不会乱码 |

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

2 rows in set (0.00 sec)

 

在 INTO OUTFILE 中使用变量

SET @tmp_sql = CONCAT(
"
SELECT * INTO OUTFILE 'C:\\\\sql_", DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),
".txt
' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY \"'\" LINES TERMINATED BY '\r\n' FROM `tab`;");
PREPARE s1 FROM @tmp_sql;
EXECUTE s1;
DROP PREPARE s1;

 

上面的代码会在C盘下生成“sql_当前时间.txt”的文件,避免INTO OUTFILE文件已存在错误

导出后的结果

 

将'name'列字符集修改为gbk

 

ALTER TABLE `tab` CHANGE `name` `name` VARCHAR(20) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL;

 

执行上面的导出命令,导出结果如下

 

抱歉!评论已关闭.