如何将 send_long_data 用于 MySQL JSON 列?

How do I use send_long_data for a MySQL JSON column?

提问人:W F 提问时间:5/1/2020 更新时间:5/7/2021 访问量:98

问:

我目前正在将 JSON 数据存储在 gzip 压缩的 LONGBLOB 列中。我想将此列更改为 JSON 列,以便 O 可以使用 MySQL 中的 JSON 函数。

但是,当我尝试使用带有JSON列的MySQL插入行时,我意识到insert_id始终为0,并且所有插入都失败了。然后我检查了 PHP MySQLi 文档,并意识到 send_long_data(我用来发送 JSON 数据)仅适用于 TEXT 和 BLOB 列。

是否有适用于 JSON 列的 send_long_data 替代方案?使用 bind_param 和字符串发送 JSON 数据是行不通的,因为我相信我的大部分数据都会超过 max_allowed_packet。

php mysql json mysqli

评论

1赞 Your Common Sense 5/1/2020
我的天啊。对 JSON 数据使用 JSON 函数,数据如此之大,以至于会超过max_allowed_packet。你的数据库对你来说是什么,你想如此残忍地折磨它?
0赞 Dharman 5/1/2020
为什么要在数据库中存储巨大的 gzip json?只需将其作为文件存储在文件系统中即可。MySQL用于关系数据。
0赞 W F 5/21/2020
我想存储草稿帖子。通常,帖子存储在一个表中,该表链接到其他表,例如带有外键的图片表。但是,我不想将草稿帖子表与所有其他表链接起来。因此,我的前端只是通过 AJAX(在客户端压缩)将整个草稿发送到我的 REST API,后者将其转储到列中。但是,缺点是我无法在服务器端读取草稿帖子中的数据,除非我 ungzip 并json_decode它。我阅读了有关MySQL JSON函数的信息,并认为它可能有助于加快我的应用程序。

答:

0赞 Alex 5/7/2021 #1

你可以这样做,但这是不好的做法:

创建一个 TEXT 字段,将数据插入其中,然后使用 UPDATE 将 TEXT 字段中的数据复制到 JSON,然后通过 UPDATE 清除 TEXT 字段。