今天接了一个蛋疼的需求 Linux导出表格 还不给用php python脚本处理 在网上搜了很多 sql 里面什么加into file等 我试过都没什么卵用。 接下来说自己研究的过程:
开发环境是vagrant + linux + windows:
1.首先在windows编辑完"xxx.txt"的文档,然后把后缀名改成 xxx.xls 记得保存格式(另存为!!!)一定要是ANSI
我发现 xls可以直接打开 并且识别中文编码
2.分析得出linux 的 保存文件是utf8编码的 所以linux里面写的sql中的"汉字“”不是GBK编码 要转换一下
于是我用notepad 转换了下文件编码ANSI 并且拷贝到linux中这样解决了编码问题,这时候这个文件是ANSI格式!!!
3.sql脚本执行命令一定要用GBK编码!!
4.上我的脚本
mysql -uXXX -pXXX -hXXX < aaa1.sql > aaa.xls
cat aaa.xls > /alidata/www/real.xls
aaa1.sql
=>
use zentao;
set names gbk;
SELECT
concat('"',t.id,'"') '"需求ID"',
concat('"',t.title,'"') '"需求标题"',
CASE concat('"',t.`status`,'"')
WHEN '"changed"' THEN '"已变更"'
WHEN '"closed"' THEN '"已关闭"'
WHEN '"active"' THEN '"激活"'
WHEN '"draft"' THEN '"草稿"'
END as '需求状态',
CASE concat('"',t.stage,'"')
WHEN '"planned"' THEN '"已计划"'
WHEN '"projected"' THEN '"已立项"'
WHEN '"wait"' THEN '"未开始"'
WHEN '"developing"' THEN '"研发中"'
WHEN '"developed"' THEN '"研发完毕"'
WHEN '"testing"' THEN '"测试中"'
WHEN '"tested"' THEN '"测试完毕"'
WHEN '"released"' THEN '"已发布"'
END as '"需求阶段"',
concat('"',DATEDIFF(t1.deadline,t1.estStarted)+1,'"') '"人天"',
concat('"',t1.estStarted,'__"') '"计划开始时间"',
concat('"',t1.deadline,'__"') '"计划结束时间"',
t1.id '"任务id"',
CASE concat('"',t1.type,'"')
WHEN '"devel"' THEN '"开发任务"'
WHEN '"test"' THEN '"测试任务"'
END as '"任务类型"',
concat('"',t1.name,'"') '"任务标题"',
concat('"',t2.realname,'"') '"由谁完成"',
case concat('"',t1.`status`,'"')
WHEN '"wait"' THEN '"未开始"'
WHEN '"doing"' THEN '"进行中"'
WHEN '"done"' THEN '"已完成"'
WHEN '"pause"' THEN '"已暂停"'
WHEN '"cancel"' THEN '"已取消"'
WHEN '"closed"' THEN '"已关闭"'
END as '"任务状态"'
FROM zt_story t
left JOIN zt_task t1 on t.id = t1.story AND t1.deleted = '0'
left JOIN zt_user t2 on t1.assignedTo = t2.account
WHERE DATE_FORMAT(t.openedDate, '%Y%m') > '201708' AND t.deleted='0' AND t.product not in ('6','23')
ORDER BY t.id DESC
注意 这里中文要加双引号 防止linux输出的时候中文会乱码!!!
因为xls是可以直接读csv格式的文件,而csv格式的文件的字段加双引号是可以无视内容里面的双引号的
xls也可以 直接读 \t 分开的文件的 比如我上面的sql 的内容就是\t分开的
5.在windows上打开xxx.xls 乱码解决了 并且表格对齐 对上了
6.Enjoy!