Json 函数在 mysql 版本 5.7 和 mariadb 10.4.11 中工作,但在 10.1.44 中不工作

Posted

技术标签:

【中文标题】Json 函数在 mysql 版本 5.7 和 mariadb 10.4.11 中工作,但在 10.1.44 中不工作【英文标题】:Json functions working in mysql version 5.7 and mariadb 10.4.11 but not in 10.1.44 【发布时间】:2020-08-18 17:27:28 【问题描述】:

我有一个奇怪的问题,在我将项目上传到 mysql 版本为 5.6 的服务器后,任何类型的 json 命令都不起作用。在我的本地主机中,我的服务器版本是 10.4.11,并且查询工作正常。我检查它必须至少为 5.7。所以我检查了 5.7 中的查询,它工作正常。然后我更新了我的服务器并更新到 10.1.44。但是现在查询不工作了

错误是:

语法错误或访问冲突 1305.function dbname.json_contains 不存在

下面是我使用 laravel 的查询之一

Card::SELECT('id','name','unique_id')
    ->where(DB::raw("json_extract(present_address, '$.union')"), 'some_union')
    ->where('geo_union_id','=',2218)
    ->get();

你能给我一个解决方案吗?如果有任何文档说明我将如何在 mariadb 10.1.44 中使用此功能,请务必告诉我

【问题讨论】:

mariaDB 中的 JSON 函数是在 V10.2.3 中引入的。简单的谷歌 好的,所以它在 5.7 或更高版本中工作,但在 mariadb 10.1.44 中不工作。如果我只是更新版本高于你所建议的,它应该可以工作。??? 是的,mariaDB 应该适用于 10.2.3 或更高版本。请记住 5.7 是 MySQL 的版本号。 MySQL 和 mariaDB 开始时几乎完全相同,但随着时间的推移,它们变得越来越不同 【参考方案1】:

根据mariadb官方页面https://mariadb.com/kb/en/json-data-type/

在 MariaDB 10.2.7 中添加了 JSON 别名。

因此,如果您想在查询中使用 json 函数,则必须使用 mariadb 的 10.2.7 或更高版本。如果你不能这样做,只需使用LONGTEXT 并在where 子句中使用regex 搜索

【讨论】:

以上是关于Json 函数在 mysql 版本 5.7 和 mariadb 10.4.11 中工作,但在 10.1.44 中不工作的主要内容,如果未能解决你的问题,请参考以下文章

MySql 5.7对json_table()函数的一次变通替代

MySQL 5.6升级至MySQL 5.7--------版本升级最佳实战

MySQL 5.7 升级到8.0

MySQL 5.6升级至MySQL 5.7

mysql.5.7版以上的对JSON数据操作

mysql.5.7版以上的对JSON数据操作