未知错误 3140 无效 JSON 文本:"Invalid value." 在位置 0 但对于 NULL 列
Unknown error 3140 Invalid JSON text: "Invalid value." at position 0 but for a NULL column
SQLSTATE[22032]: <<Unknown error>>: 3140 Invalid JSON text: "Invalid value." at position 0 in value for column 'form_fields.options'. (SQL: INSERT INTO `form_fields` VALUES (1, 'first_name', 'First Name', 6, 1, 'text', NULL, 'string', NULL, NULL, NULL, '2019-05-28 16:44:08', '2019-05-28 16:44:08', NULL);)
此查询中的 options
列是 NULL
所以我不知道它是如何在位置 0 上出现“无效值”错误的。
我们目前在该列中有大量 NULL 值,并且该列被定义为可为空。
我只是从一个数据库中转储 table 并尝试 运行 在另一个相同的数据库上插入以播种它。
Table结构:
CREATE TABLE `form_fields` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`required` tinyint(1) NOT NULL DEFAULT '0',
`type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`subtext` text COLLATE utf8mb4_unicode_ci,
`validations` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`options` json DEFAULT NULL,
`html_attributes` json DEFAULT NULL,
`display_width` int(11) NOT NULL DEFAULT '12',
`gender` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `form_fields_name_index` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
在您的 table 定义中,options
是第 8 列,但您插入的第 8 个值不是 NULL,而是 'string'
。其他的也不匹配。第 5 列是一个 VARCHAR,但第 5 个值是一个数字。
尝试枚举插入中的列名以确保使用正确的列顺序。
INSERT INTO table(col1, col2 ...) VALUES ('val1', 2, NULL, ...)
要求:
INSERT INTO `messages`(`data`, `only_text_msg`, `media_group_id`, `media_group_json`, `forward_date`) VALUES ('1','None','secret_id','{\'media\': [\'media_id\']}','2022-03-27 12:09:37')
问题是在数据库json单元格中,需要写成双括号"
也就是说,json 本身需要包装在类似这样的函数中:
*Python
def json_to_string(json):
js = str(json)
ret_str = ""
for i in js:
f = ""
if i == "\"" or i == "'":
if i == "'":
i = "\""
f = "\"
ret_str += f+i
return ret_str
和其他一些代码:
lol = {
"asda" : '2w',
1 : 32,
'2' : 22
}
import json
print(json.dumps(lol))
{“阿斯达”:“2w”,“1”:32,“2”:22}
SQLSTATE[22032]: <<Unknown error>>: 3140 Invalid JSON text: "Invalid value." at position 0 in value for column 'form_fields.options'. (SQL: INSERT INTO `form_fields` VALUES (1, 'first_name', 'First Name', 6, 1, 'text', NULL, 'string', NULL, NULL, NULL, '2019-05-28 16:44:08', '2019-05-28 16:44:08', NULL);)
此查询中的 options
列是 NULL
所以我不知道它是如何在位置 0 上出现“无效值”错误的。
我们目前在该列中有大量 NULL 值,并且该列被定义为可为空。
我只是从一个数据库中转储 table 并尝试 运行 在另一个相同的数据库上插入以播种它。
Table结构:
CREATE TABLE `form_fields` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`required` tinyint(1) NOT NULL DEFAULT '0',
`type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`subtext` text COLLATE utf8mb4_unicode_ci,
`validations` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`options` json DEFAULT NULL,
`html_attributes` json DEFAULT NULL,
`display_width` int(11) NOT NULL DEFAULT '12',
`gender` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `form_fields_name_index` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
在您的 table 定义中,options
是第 8 列,但您插入的第 8 个值不是 NULL,而是 'string'
。其他的也不匹配。第 5 列是一个 VARCHAR,但第 5 个值是一个数字。
尝试枚举插入中的列名以确保使用正确的列顺序。
INSERT INTO table(col1, col2 ...) VALUES ('val1', 2, NULL, ...)
要求:
INSERT INTO `messages`(`data`, `only_text_msg`, `media_group_id`, `media_group_json`, `forward_date`) VALUES ('1','None','secret_id','{\'media\': [\'media_id\']}','2022-03-27 12:09:37')
问题是在数据库json单元格中,需要写成双括号" 也就是说,json 本身需要包装在类似这样的函数中:
*Python
def json_to_string(json):
js = str(json)
ret_str = ""
for i in js:
f = ""
if i == "\"" or i == "'":
if i == "'":
i = "\""
f = "\"
ret_str += f+i
return ret_str
和其他一些代码:
lol = {
"asda" : '2w',
1 : 32,
'2' : 22
}
import json
print(json.dumps(lol))
{“阿斯达”:“2w”,“1”:32,“2”:22}