MySQL Workbench导入JSON时将null识别为'None'的解决办法咨询
问题描述
我正在搭建本地数据库,通过Table Data Export Wizard从DEV环境导出JSON格式的数据,示例数据如下:
[{"id":1534991, "name":"John Doe", "added_on":null}, {"id":1534992, "name":"John Doe 2", "added_on":null}]
但使用MySQL Workbench导入该数据时,预览显示工具试图插入'None'而非MySQL的NULL。为复现问题,我创建了测试表:
create table employee ( id int primary key, name varchar(255), added_on timestamp default current_timestamp);
已知CSV格式导出可行,但原表存在大量包含长JSON数据的列,CSV导入存在问题,想了解MySQL Workbench是否有相关选项或设置解决该问题。
解决办法
调整Workbench导入的高级设置
打开Table Data Import Wizard,选择目标JSON文件后,进入Advanced Options面板,找到NULL值映射的相关选项,确认将JSON中的null映射为MySQL的NULL而非字符串'None'。部分版本的Workbench默认会把JSON的null转成字符串,手动修改这个规则即可。预处理JSON文件
如果Workbench没有对应设置,用文本编辑器(如VS Code)的全局替换功能处理JSON文件:- 使用正则表达式
(?<=[\s,:])null(?=[\s,:}])匹配JSON结构中的独立null值,替换为NULL(MySQL对NULL大小写不敏感,但大写更规范)。 - 注意避开JSON字符串内容里的
null(比如某列值为"description": "null value example"),正则表达式可以精准匹配结构内的null。
- 使用正则表达式
用LOAD DATA INFILE命令手动导入
跳过图形化向导,用命令行导入更灵活,适合带嵌套JSON的列:LOAD DATA INFILE '/absolute/path/to/your/data.json' INTO TABLE employee FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (@json_row) SET id = JSON_UNQUOTE(JSON_EXTRACT(@json_row, '$.id')), name = JSON_UNQUOTE(JSON_EXTRACT(@json_row, '$.name')), added_on = NULLIF(JSON_UNQUOTE(JSON_EXTRACT(@json_row, '$.added_on')), 'null');该命令通过
NULLIF函数将JSON解析出的'null'字符串转换为MySQL的NULL,同时正确解析JSON字段内容。检查导出端设置
回到Table Data Export Wizard,确认导出JSON时的NULL Handling选项,是否设置为导出null而非'None'。如果是导出环节把数据库NULL转成了'None',从源头调整设置可以彻底解决问题。
内容的提问来源于stack exchange,提问作者Akki

