You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LOAD DATA LOCAL INFILE导入CSV报错:需提供streamFactory选项

解决LOAD DATA LOCAL INFILE 需streamFactory的问题

问题根源

node-mysql2 从v2.0版本开始,对LOAD DATA LOCAL INFILE做了安全限制,不再自动读取本地文件,必须显式配置streamFactory来提供文件读取流。

分步解决

1. 连接数据库时配置streamFactory

创建连接的时候,加上streamFactory选项,指定读取文件的逻辑:

const mysql = require('mysql2/promise');
const fs = require('fs');

async function getDbConnection() {
  const conn = await mysql.createConnection({
    host: 'localhost',
    user: '你的用户名',
    password: '你的密码',
    database: '目标数据库',
    // 关键配置:添加streamFactory
    streamFactory: (filePath) => {
      return fs.createReadStream(filePath);
    },
    // 必须开启这个选项,否则LOCAL INFILE会被禁用
    enableLocalInfile: true
  });
  return conn;
}

2. 确保MySQL服务允许LOCAL INFILE

先执行这条SQL开启全局权限:

SET GLOBAL local_infile = 1;

3. 修正你的导入语句

原语句里的ENCLOSED BY '"'可以直接写'"',换行符用'\n'更兼容:

LOAD DATA LOCAL INFILE 'yob2019.csv' 
INTO TABLE baby_names 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n';

4. 检查文件路径与权限

  • 用相对路径的话,要确认文件在VSCode终端的当前工作目录下,或者直接用绝对路径
  • Linux/macOS下如果权限不够,执行chmod +r yob2019.csv赋予读取权限

额外注意

如果你是用VSCode的MySQL扩展执行语句,有些扩展不支持自定义streamFactory配置,这种情况建议写个简单的Node.js脚本执行导入逻辑,避免扩展的限制。

内容的提问来源于stack exchange,提问作者Ziongeek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:05:11