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

将API数据存入MySQL时出现‘未知列’错误,求解决(附代码)

问题排查与解决

核心错误原因

你的SQL插入语句中,字段列表的反引号使用错误:

INSERT INTO countries (`cca2,ccn3,cca3,region,latlng`) values ?

这里把所有字段名包裹在单个反引号内,MySQL会将cca2,ccn3,cca3,region,latlng识别为一个单独的字段名,而非多个字段的集合,自然会提示找不到该列。

额外注意点

接口返回的latlng是数组类型(例如[34, -40]),MySQL无法直接存储数组,需要先转换为字符串格式(推荐JSON字符串,方便后续解析)。

修正后的代码

(async () => {
  let arr = [];

  try {
    const response = await fetch('https://restcountries.com/v3.1/all');
    const json = await response.json();

    json.forEach((element) => {
      let obj = {
        cca2: element.cca2,
        ccn3: element.ccn3,
        cca3: element.cca3,
        region: element.region,
        // 将latlng数组转为JSON字符串
        latlng: JSON.stringify(element.latlng),
      };
      arr.push(obj);
    });

    // 修正SQL字段列表的反引号使用
    const sql = 'INSERT INTO countries (cca2, ccn3, cca3, region, latlng) VALUES ?';
    // 用promise封装query,方便异步错误处理
    await new Promise((resolve, reject) => {
      db.query(sql, [
        arr.map((item) => [
          item.cca2,
          item.ccn3,
          item.cca3,
          item.region,
          item.latlng,
        ]),
      ], (err, result) => {
        if (err) reject(err);
        else resolve(result);
      });
    });
    console.log('数据插入成功');
  } catch (error) {
    console.error('处理过程出错:', error);
  }
})();

补充说明

  1. 如果你的countries表中字段名是MySQL关键字(这里显然不是),可以给每个字段单独加反引号:
    INSERT INTO countries (`cca2`, `ccn3`, `cca3`, `region`, `latlng`) VALUES ?
    
  2. 若后续需要读取latlng并恢复为数组,只需用JSON.parse()解析即可。
  3. 加入了db.query的异步错误处理,避免遗漏插入失败的情况。

内容的提问来源于stack exchange,提问作者The Tech Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:01:08