MySQL Workbench 不接受 JSON 文件(错误 1290)

标签 mysql json database mysql-workbench

我有一个生成 .json 文件的测试套件。我想将 JSON 文件存储在 MYSQL 中。我不在乎它如何存储它。我只是想把它放在那里,这样我就可以把它拉出来。

在线研究后,我尝试使用表数据导入向导通过 GUI 执行传统路线:

Using the GUI

我遇到了以下错误:

Meaningless error

Can't analyse file. Please try to change encoding type. If that doesn't help, maybe the file is not: json, or the file is empty.

该文件显然不为空,并且该文件是有效的 JSON。我什至将它放入一个验证 JSON 的在线工具中。我上网查了一下,也有人遇到这个问题。因此,我将编码更改为 Notepad++ 中可用的每个选项。其中包括:

  • ANSI
  • UTF-8
  • UTF-8-BOM
  • UCS-2-BE-BOM
  • UCS-2-LE-BOM

我仍然收到相同的错误消息。所以我像一个好的堆栈溢出用户一样查找这个,这样每个人都不会对我大喊大叫,我发现这是 identified and verified as a bug in April of 2019.这是在 8.0.15 版本中。我用的是8.0.19。我不知道这个问题是否已经解决,因为我需要一个 Oracle 帐户来查看进度日志(出于一些令人敬畏的无法解释的原因)。

因此,我采取了另一种方法,尝试将 SQL 查询直接输入 My SQL Workbench。令人惊讶的是,它不起作用:

errorAgain

我收到错误 1290,内容如下:

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement.

checked stack overflow并尝试了以下解决方案:

  • 注释掉链接的 my.ini 文件中的--secure-file-priv 设置
  • 将 json 文件直接放入 --secure-file-priv 指向的“uploads”文件夹
  • 重新启动 MySQL/我的电脑

这些都不起作用。它还建议在同一页面上的文件路径中将“\”替换为“/”,但我无法看到您将在哪里替换它。将其替换为查询中 .json 文件的文件路径会导致相同的错误。我不知道如何在可执行文件的路径上替换它,因为没有选项可以做到这一点。

在每个人开始扔东西之前,这里有一些每个人都要求的基本信息:

  • 我使用的是 Windows 10
  • 这是 MySQL Workbench 8.0.19
  • 这里使用 MySQL Server 8.0

如果有人真的知道如何解决这个问题,我会很高兴。

我使用的是 Windows 10

最佳答案

第 1 步:确保您设置了 secure_file_priv 参数

mysql> select @@GLOBAL.secure_file_priv;
+----------------------------------+
| @@GLOBAL.secure_file_priv        |
+----------------------------------+
| /Users/demo/mysql/upload/ |
+----------------------------------+
1 row in set (0.00 sec)

第 1a 步:未设置 secure_file_priv 参数时

编辑/Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist并添加以下行

<string>--secure-file-priv=/Users/demo/mysql/upload</string>

添加文件后应如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>EnvironmentVariables</key>
    <dict>
        <key>MYSQLD_PARENT_PID</key>
        <string>1</string>
    </dict>
    <key>ExitTimeOut</key>
    <integer>600</integer>
    <key>GroupName</key>
    <string>_mysql</string>
    <key>KeepAlive</key>
    <dict>
        <key>AfterInitialDemand</key>
        <true/>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>Label</key>
    <string>com.oracle.oss.mysql.mysqld</string>
    <key>LaunchOnlyOnce</key>
    <false/>
    <key>ProcessType</key>
    <string>Interactive</string>
    <key>Program</key>
    <string>/usr/local/mysql/bin/mysqld</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/mysql/bin/mysqld</string>
        <string>--basedir=/usr/local/mysql</string>
        <string>--datadir=/usr/local/mysql/data</string>
        <string>--plugin-dir=/usr/local/mysql/lib/plugin</string>
        <string>--early-plugin-load=keyring_file=keyring_file.so</string>
        <string>--keyring-file-data=/usr/local/mysql/keyring/keyring</string>
        <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string>
        <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string>
        <string>--user=_mysql</string>
        <!--Add this line-->
        <string>--secure-file-priv=/Users/demo/mysql/upload</string> 
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>SessionCreate</key>
    <true/>
    <key>UserName</key>
    <string>_mysql</string>
    <key>WorkingDirectory</key>
    <string>/usr/local/mysql</string>
</dict>
</plist>

第 2 步:创建一个包含 TEXT 列的表格

CREATE TABLE `table1` (
  `id` int NOT NULL AUTO_INCREMENT,
  `json_data` text NOT NULL,
  PRIMARY KEY (`id`)
) ;

第 3 步:使用 LOAD_FILE 函数将值插入到 TEXT

insert into schema1.table1 (json_data) 
values (LOAD_FILE('/Users/demo/mysql/upload/data.json'));

第4步:通过select查询查看记录

mysql> select * from schema1.table1;
+----+-------------------------------------------------------------+
| id | json_data                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
+----+-------------------------------------------------------------+
|  1 | [
    {
        "id": 1,
        "name": "Vijayan Srinivasan",
        "place": "Bangalore"
    },
    {
        "id": 2,
        "name": "Vijayan Srinivasan",
        "place": "Chennai"
    },
    {
        "id": 3,
        "name": "Vijayan Srinivasan",
        "place": "Delhi"
    },
    {
        "id": 4,
        "name": "Vijayan Srinivasan",
        "place": "Mangalore"
    },
    {
        "id": 5,
        "name": "Vijayan Srinivasan",
        "place": "Mumbai"
    }
] |
+----+-------------------------------------------------------------+
1 row in set (0.00 sec)

关于MySQL Workbench 不接受 JSON 文件(错误 1290),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59970639/

相关文章:

mysql - 编码和整理之间的区别?

mysql - 尚不存在的 SQL 数据库的数据转储文件类型

mysql - 无法启动Mysql-server服务

json - 忽略 struct 中的对象为 nil,而不是当它是空数组时

ios - 从 url 下载数据时等待填充表格 View

database - 非识别关系中的强制性和非强制性

MySQL 更新多行以递增值不起作用

java - 用于原始类型的 Jackson 序列化器

mysql - 我收到保存点 'unrecogniszed statement type' 错误

java - 使用 GAE 生成字符串 ObjectId