为什么涉及MariaDB JSON的等号不是自反的?

ykejflvf  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(144)

下面的MariaDB语句使用JSON_EXTRACT将JSON转义字符串a转换为JSON类型的值,然后将该值与其自身进行比较。比较结果为not equal。我认为相等是自反的(除非涉及NULL和NaN的棘手问题),也就是说,值总是等于其自身。我误解了什么?

SELECT
JSON_EXTRACT('"a"', '$'),
JSON_EXTRACT('"a"', '$') =
JSON_EXTRACT('"a"', '$');

服务器信息:

Server: Localhost via UNIX socket
Server type: MariaDB
Server connection: SSL is not being used Documentation
Server version: 10.6.7-MariaDB-2ubuntu1-log - Ubuntu 22.04
Protocol version: 10
User: phpmyadmin@localhost
Server charset: UTF-8 Unicode (utf8mb4)
zlwx9yxi

zlwx9yxi1#

显然,解决方案是使用JSON_EQUALS(),它是在MariaDB 10.7中添加的。我没有MariaDB 10.7的示例,所以我无法测试它,而且dbfiddle只能升级到MariaDB 10.6。
但是,您可以取消引用JSON来提取字符串值,并测试是否相等。

SELECT
JSON_UNQUOTE(JSON_EXTRACT('"a"', '$')) AS a,
JSON_UNQUOTE(JSON_EXTRACT('"a"', '$')) =
JSON_UNQUOTE(JSON_EXTRACT('"a"', '$')) AS `a=a`;

| 一种|a=a|
| - -|- -|
| 一种|一个|
https://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=6fa8c7156e6fe9213bfbf44dd57e2c63

相关问题