MySQL 5.7 Use The JSON Data Type(MySQL 使用 JSON 数据类型)

文章摘译自 MySQL 5.7 Reference Manual / Data Types / The JSON Data Type

自 MySQL 5.7.8 起,MySQL 支持 JSON 数据类型,优势如下

  • 自动验证数据合法
  • 优化存储格式

存储在 JSON columns 中的 JSON documents 大小受限于 max_allowed_packet
JSON columns 不允许有默认值

Creating JSON Values

JSON array 包含一列值,逗号分割,[ and ] 包裹
["abc", 10, null, true, false]

JSON object 包含 key/value 对,逗号分割,{ and } 包裹
{"k1": "value", "k2": 10}

JSON arrays and objects 可以包含 strings, numbers, JSON null literal, JSON boolean true or false literals, date, time, or datetime
JSON objects 里面 Keys 必须是 strings
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]

支持嵌套

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}

JSON column 尝试插入一个值,成功当它合法,失败当它非法

mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text: "Invalid value." at position 6 in value (or column) '[1, 2,'.

JSON_TYPE() 需要一个 JSON 参数,尝试解析成 JSON 值,返回该值的 JSON 类型,失败返回错误

mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1
to function json_type; a JSON string or JSON type is required.

MySQL 在 JSON context 中处理字符串使用 utf8mb4 character set and utf8mb4_bin collation

JSON_ARRAY() 需要一列值(可能空),返回 JSON array 包含这些值

mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+------
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值