ITPub博客

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

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

MySQL 作者:season0891 时间:2014-08-25 15:41:15 0 删除 编辑

http://www.cnblogs.com/consatan/archive/2010/12/22/into_outfile_gbk.html
直接在命令行中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;

 

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

 

分类: SQL

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/90618/viewspace-1257379/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-06-10

  • 博文量
    790
  • 访问量
    2098012