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

嵌套JSON转MySQL表遇1064语法错误,求问题排查方案

JSON导入MySQL失败的原因分析与解决建议

错误原因分析

  • 字段名含特殊字符:JSON键名里的单引号(如BEEN KO'D PERCENTAGE中的')、空格、点号(如EST. POWER中的.)属于MySQL标识符的特殊字符,直接使用会被SQL解析器当成语法符号,引发语法错误。
  • 导入工具自动映射缺陷:Table Data Import Wizard处理带特殊字符的JSON键时,未自动给字段名添加反引号`转义,导致生成的SQL语句语法违规。

解决建议

方法1:修改JSON键名(推荐)

手动替换原始JSON中的特殊字符,使其符合MySQL字段命名规范:

  • 空格替换为下划线_
  • 单引号移除或替换
  • 点号替换为下划线

修改后的JSON示例:

{
    "name": "JORGE SEBASTIAN ANGULO",
    "WINS": "0",
    "LOSSES": "0",
    "DRAWS": "0",
    "KO_PERCENT": "0%",
    "ROUND_KO_PERCENTAGE": "0%",
    "ROUNDS_BOXED": "0",
    "BEEN_STOPPED": "0",
    "OPPONENTS_STOPPED": "0",
    "BEEN_KOD_PERCENTAGE": "0%",
    "BEEN_KOD_ROUND_PERCENTAGE": "0%",
    "AVERAGE_WINNING_ROUND": "0",
    "AVERAGE_LOSING_ROUND": "0",
    "KNOCKOUT_PERCENT": "0%",
    "EST_POWER": "0%",
    "EST_CHIN_BODY": "0%",
    "win_type": {},
    "opponent": {
        "TOTAL_FIGHT_COUNT": "0",
        "EST_POWER_AVERAGE": "0%",
        "EST_PUNCH_RESISTANCE": "0%"
    }
}

修改后再用导入工具即可正常识别字段。

方法2:手动建表后导入

  1. 先创建包含特殊字段名的表,用反引号包裹特殊字段:
CREATE TABLE boxers (
    `name` TEXT,
    `WINS` TEXT,
    `LOSSES` TEXT,
    `DRAWS` TEXT,
    `KO %` TEXT,
    `ROUND KO PERCENTAGE` TEXT,
    `ROUNDS BOXED` TEXT,
    `BEEN STOPPED` TEXT,
    `OPPONENTS STOPPED` TEXT,
    `BEEN KO'D PERCENTAGE` TEXT,
    `BEEN KO'D ROUND PERCENTAGE` TEXT,
    `AVERAGE WINNING ROUND` TEXT,
    `AVERAGE LOSING ROUND` TEXT,
    `KNOCKOUT %` TEXT,
    `EST. POWER` TEXT,
    `EST. CHIN/BODY` TEXT,
    `win_type` JSON,
    `opponent` JSON
);
  1. 使用Table Data Import Wizard时选择「已存在的表」,将JSON键映射到对应字段即可。

方法3:使用LOAD DATA INFILE命令(进阶)

适合大数量导入,手动处理字段映射与转义:

LOAD DATA INFILE '/本地文件路径/你的数据.json'
INTO TABLE boxers
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(@json)
SET
    `name` = JSON_UNQUOTE(JSON_EXTRACT(@json, '$.name')),
    `WINS` = JSON_UNQUOTE(JSON_EXTRACT(@json, '$.WINS')),
    `BEEN KO'D PERCENTAGE` = JSON_UNQUOTE(JSON_EXTRACT(@json, '$."BEEN KO\'D PERCENTAGE"')),
    `win_type` = JSON_EXTRACT(@json, '$.win_type'),
    `opponent` = JSON_EXTRACT(@json, '$.opponent');

注意:需确保MySQL允许本地文件导入,且文件路径正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:25:38