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

直接在命令行中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 ;

 

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

 

转载于:https://www.cnblogs.com/consatan/archive/2010/12/22/INTO_OUTFILE_GBK.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值