Вы столкнулись с двумя отдельными проблемами:
- не удается импортировать файл в MySQL Workbench
- не удается вручную импортировать
Фактический файл
Я знаю, что вы говорите, что ваш JSON действителен, и я вам верю. Однако тот факт, что JSON является действительным, не означает автоматически, что он может быть вставлен / обновлен как есть. Рассмотрим это JSON в качестве примера:
{
"test": "I'm valid"
}
Если вы запустите это JSON в валидаторе, вы поймете, что это действительно JSON. Однако вы не сможете присвоить это значение текстовому полю в MySQL, потому что:
- оно не заключено в апострофы
- , в нем есть неоткрытый апостроф
Помимо этого, в моем примере даже есть новые строки, которые не должны быть проблемой, но я бы также посмотрел на новые строки, если бы вы были вами, чтобы увидеть, какие там могут быть белые символы.
Столбец
Фактический столбец, в который вы собираетесь поместить JSON, может составлять text
или json
. Документы очень полезны здесь: https://dev.mysql.com/doc/refman/8.0/en/json.html
Давайте посмотрим пример оттуда:
CREATE TABLE t1 (jdoc JSON);
и
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Вы должны обратите внимание, что во время вставки фактическое JSON заключено в апострофы. Значение
'{"key1": "value1", "key2": "value2"}'
равно not
, допустимо JSON, но его можно вставить, потому что если мы отложим в сторону апострофы, обернутые вокруг значения, то это будет действительное JSON.
Итак, я предлагаю, чтобы, пытаясь выяснить, как можно вставить JSON, создайте тестовый файл. json файл
'{}'
и еще один, например * 1048. *
{}
и протестируйте оба варианта. Мы знаем, что окончательное значение должно быть заключено в апострофы, но мы не знаем, сделает ли это для вас MySQL или Workbench. Поэтому вы должны стремиться понять, как это работает. Если импорт завершится успешно, вы сможете сравнить JSON с ним.
Workbench
Да, это ошибка, но она не обязательно применима здесь. Попробуйте использовать тестовые значения JSON, описанные в предыдущем разделе.
Защищенный файл priv
secure-file-priv ограничивает места, из которых можно импортировать файлы. Это хорошо, потому что позволяет защитить вашу базу данных, ограничивая доступ к пути доверенных пользователей, и гарантирует, что вы не получите импорт файлов, разбросанных по всему жесткому диску. Однако, поскольку эта опция включена, вам нужно будет проверить ее значение, как описал Виджаян Сиринивасан, и использовать это местоположение.
Подробнее здесь: Как мне решать --secure-file-priv в MySQL?