未知错误 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}