在MySQL中导出查询结果到文件,可以使用以下方法:
方法一:使用 SELECT ... INTO OUTFILE
(服务端导出)
sql
复制
SELECT kid, title, question FROM knowledge_base_faq_batch WHERE label = '帮助中心FAQ' LIMIT 1000 INTO OUTFILE '/tmp/result.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
注意:
-
文件路径需在MySQL允许的目录(通过
SHOW VARIABLES LIKE 'secure_file_priv';
查看)。 -
需要MySQL用户有
FILE
权限。 -
默认覆盖已有文件,若文件存在会报错。
方法二:命令行重定向(本地导出)
bash
复制
mysql -u 用户名 -p 数据库名 -e "SELECT kid, title, question FROM knowledge_base_faq_batch WHERE label = '帮助中心FAQ' LIMIT 1000;" > ~/result.csv
优化格式(避免表格线):
bash
复制
mysql -u 用户名 -p --batch --silent 数据库名 -e "SELECT kid, title, question FROM knowledge_base_faq_batch WHERE label = '帮助中心FAQ' LIMIT 1000;" | tr '\t' ',' > ~/result.csv
-
--batch --silent
去除格式化输出。 -
tr '\t' ','
将制表符替换为逗号,生成CSV。
方法三:使用MySQL Workbench
-
执行查询语句。
-
结果网格下方点击 “Export” 图标。
-
选择格式(CSV/Excel)和路径导出。
处理特殊字符
在 INTO OUTFILE
中增加转义和编码设置:
sql
复制
CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
常见问题
-
权限不足:确保用户有
FILE
权限,且路径在secure_file_priv
允许范围内。 -
文件已存在:导出前删除旧文件或更换文件名。
-
乱码问题:导出时指定正确的字符集(如
utf8mb4
)。
导出命令
mysql -uroot -h192.168.1.245 -P3306 -p1**** business_chatgpt -e "SELECT CASE WHEN title = '全部' THEN '' WHEN LOCATE('/', title) = 0 THEN '' ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(title, '/', 2), '/', -1) END AS extracted_title, kid FROM knowledge_base_faq;" | tr '\t' ',' > batch_result_faq.txt
导入命令
mysql -uroot -h192.168.1.245 -P3306 -p123456 business_chatgpt < /opt/onlinetask/udpate-source.sql
文件内容:
UPDATE knowledge_base_faq set title = '移动帮助' where kid = 3332;
UPDATE knowledge_base_faq set title = '人资管理' where kid = 3333;
UPDATE knowledge_base_faq set title = '人资管理' where kid = 3334;
UPDATE knowledge_base_faq set title = '财务管理' where kid = 3335;
UPDATE knowledge_base_faq set title = '人资管理' where kid = 3336;
UPDATE knowledge_base_faq set title = '财务管理' where kid = 3337;
UPDATE knowledge_base_faq set title = '人资管理' where kid = 3338;
UPDATE knowledge_base_faq set title = '财务管理' where kid = 3339;
UPDATE knowledge_base_faq set title = '人资管理' where kid = 3340;