MySQL 中 -> 和 ->> 操作符的区别
简介
- MySQL 5.7 或更高版本,可以使用
->>
和->
运算符简化语法 - 这两个操作符都是用于提取 JSON 数据的,但有一些重要区别
->
操作符
-
功能:提取 JSON 对象的指定路径的值
-
返回类型:返回 JSON 类型的值(可能带有引号)
-
等效于:
JSON_EXTRACT(json_doc, path)
-
示例:
SELECT additional_info->'$.source' FROM calendar;
如果
additional_info
是{"source": "google"}
,返回的是 JSON 格式的"google"
(带引号)
->>
操作符
-
功能:提取 JSON 对象的指定路径的值并取消引用
-
返回类型:返回字符串类型的值(去掉引号)
-
等效于:
JSON_UNQUOTE(JSON_EXTRACT(json_doc, path))
-
示例:
SELECT additional_info->>'$.source' FROM calendar;
同样的数据会返回字符串
google
(不带引号)
关键区别对比
特性 | -> | ->> |
---|---|---|
返回值类型 | JSON 类型(可能带引号) | 字符串类型(无引号) |
等效函数 | JSON_EXTRACT() | JSON_UNQUOTE(JSON_EXTRACT()) |
使用场景 | 需要保留JSON格式时 | 需要普通字符串时 |
NULL处理 | 路径不存在返回NULL | 路径不存在返回NULL |
实际应用示例
-- 假设 additional_info = '{"source": "google", "score": 5}'SELECT additional_info->'$.source' AS with_quotes, -- 返回 ""google"" (JSON字符串)additional_info->>'$.source' AS without_quotes, -- 返回 "google" (普通字符串)additional_info->'$.score' AS score_json, -- 返回 5 (JSON数字)additional_info->>'$.score' AS score_string -- 返回 "5" (字符串)
FROM calendar;
何时使用哪个
- 使用
->>
当:- 你需要直接比较或作为字符串使用
- 你需要去除JSON字符串的引号
- 你需要将结果与其他字符串连接
- 使用
->
当:- 你需要保持JSON格式进行进一步JSON操作
- 你需要确保返回的是有效的JSON值
- 你要将结果传递给其他JSON函数