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

CREATETABLE `tab`(

 `id` INT(1) NOTNULL AUTO_INCREMENT PRIMARYKEY,

 `name` VARCHAR(10) NOTNULL,

 `add` VARCHAR(20) CHARACTERSET gbk NOTNULL

)ENGINE=InnoDB DEFAULT CHARSET=utf8;



INSERTINTO `tab`(`name`,`add`) VALUES

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

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



SELECT*FROM `tab`;



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

| id | name |add|

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

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

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

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

2 rows inset (0.00 sec)


ExpandedBlockStart.gif在 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文件已存在错误

导出后的结果

483b1b109313b07e95a7c9470cd7912396dd8cb6


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


ALTERTABLE `tab` CHANGE `name`   `name` VARCHAR(20) CHARACTERSET gbk COLLATE gbk_chinese_ci NOTNULL;


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

6e0df8db81cb39dba9f83219d0160924aa18308b


你可能感兴趣的:(into,outfile,OUTFILE中使用变量方法)