mysql有没有json类型?


本文摘自PHP中文网,作者青灯夜游,侵删。

mysql有json类型。MySQL从5.7版本开始,引入了JSON数据类型,可以直接操作json数据;但MySQL5.7版本以下,在表中保存JSON格式类型的数据,则需要依靠varchar或者text之类的数据类型。

MySQL中的JSON类型

json是一个非常好用的数据类型,在mysql5.7之前人们都是用string来储存json的,但是这样有个问题就是不能操作json,5.7以后就可以直接操作json数据了。

  1. 创建没什么好说的就是json 不用带长度默认为0
  2. 更新 、和插入可以用string插入
  3. 查询、个人不喜欢把数据交给后台处理,那就交给数据库处理吧例子如下:
  4. 数据库某张表有个content_json字段,里面有这样的数据!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

{

  "bill": [

    {

      "bill": [

        {

          "id": "C81AEAD03F90000142E81B405F6FADC0",

          "uuid": "cfd872541b3b4507a50c2b2eda6bef28",

          "billid": "kjdzyljgmzsfzypj",

          "pageno": [],

          "billver": "V1",

          "billname": "新增测试",

          "fjNumber": "",

          "trueName": "",

          "allPageno": [

            {

              "top": 13,

              "left": 7

            }

          ],

          "billValue": {},

          "isOtherZL": "",

          "billNumber": "",

          "fjTMNumber": ""

        },

        {

          "id": "C81AED69D6400001A07818551D9EBEC0",

          "uuid": "05d87c8052cd44209c684407d200b7ec",

          "billid": "opztsfpsgd",

          "pageno": [],

          "billver": "V1",

          "billname": "发票申购",

          "fjNumber": "",

          "trueName": "",

          "allPageno": [

            {

              "top": 13,

              "left": 7

            }

          ],

          "isOtherZL": "",

          "billNumber": "",

          "fjTMNumber": ""

        }

      ],

      "index": "",

      "dependBjBill": {

        "formula": "",

        "keyView": ""

      },

      "codeCondition": {

        "formula": "",

        "keyView": ""

      },

      "billRuleCondition": {

        "formula": "",

        "keyView": ""

      }

    },

    {

      "bill": [

        {

          "id": "C81AED84903000019B29EAB0196014CE",

          "uuid": "0d93fe614d09489cbad8fa5a3d160289",

          "billid": "kjdzcwgwht",

          "pageno": [],

          "billver": "V1",

          "billname": "财务顾",

          "fjNumber": "",

          "trueName": "",

          "allPageno": [

            {

              "top": 39,

              "left": 7

            }

          ],

          "isOtherZL": "",

          "billNumber": "",

          "fjTMNumber": ""

        }

      ],

      "index": "",

      "dependBjBill": {

        "formula": "",

        "keyView": ""

      },

      "codeCondition": {

        "formula": "",

        "keyView": ""

      },

      "billRuleCondition": {

        "formula": "",

        "keyView": ""

      }

    }

  ],

  "questions": [],

  "relyonCondition": {}

}

结构是这样的,我们要查询最底层uuid!按条件查bill下是一个数组 里面的bill还是一个数组那么要查最底层的uuid怎么查呢?
这里写图片描述
个人更喜欢用类似lambda这种方法毕竟这是一个有逼格又好看的操作:

1

2

3

SELECT content_json->'$.bill[*].bill[*].uuid'

from  b

WHERE JSON_CONTAINS(content_json->'$.bill[*].bill[*].uuid' ,'["cfd872541b3b4507a50c2b2eda6bef28"]')

查询结果这里写图片描述

代码分析:
content_json->’$.bill[].bill[].uuid’ ;

表示content_json字段
"$"是必须符号 点代表对象
*代表全部

那么代码意思就是查询content_json字段里面全部bill(第一个)中全部bill(第二个)的uuid组成一个数组返回;
where后面跟着的条件的意思是 存在某个值 这个值可以是一个也可以是多个
JSON_CONTAINS(字段,参数);
字段必须是要查的指定值如 content_json->’$.bill[].bill[].uuid’ ;
参数必须是json类型 string是不行的。

推荐教程:mysql视频教程

以上就是mysql有没有json类型?的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql如何修改开启允许远程连接的实例详解

mysql密码加密与解密详解

mysql生僻字插入失败怎么办

mysql常见约束有哪些

mysql索引介绍

mysql 十大优化方法

mysql进阶select语法篇

详解mysql数据库之触发器

mysql找回用户数据的实例详解

mysql常用引擎总结分享

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...