Atitit mysql 数据类型 5.7.9 目录 1.1. 数值类型 1 2. 字符串 2 3. 时间日期 2 4. 地理位置 2 5. 几何数据的存储,生成,分析,优化。 空间数据类型(存储)

Atitit mysql 数据类型 5.7.9

 

目录

1.1. 数值类型 1

2. 字符串 2

3. 时间日期 2

4. 地理位置 2

5. 几何数据的存储,生成,分析,优化。 空间数据类型(存储) 2

6. 复合json 3

6.1. Enum 枚举类型 set 3

7. 问题,, 3

7.1. navacite 不支持查询json问题,可能是版本太低,使用java直接查询 3

7.2. Json索引问题 3

8. JSON数据查询: 4

8.1. 2)插入数据 4

8.2. 首先通过json对象中的某个键值对来做条件查询 5

8.2.1. 其他JSON函数 5

9. ref 6

 

 

 

MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型。也方便了广大开发人员。但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少没有直接对其字段进行索引的方法。本文将介绍利用MySQL 5.7中的虚拟字段的功能来对JSON对象中的字段进行索引。



 

 

 

    1. 数值类型
  1. 字符串
  2. 时间日期
  3. 地理位置

MySQL中的point用于表示GIS中的地理坐标,在GIS中广泛使用,

 

POINT、LINESTRING这样的,用 byte[] ,也就是二进制数组才行。用string和int[]这样的都不行。

其余空间类型都是基于这两个的,相必也是这样。

得到byte[]之后再转换成相应的内容就行了

 

MultiLineString、Polygon、GeometryCollectio

 

  1. 几何数据的存储,生成,分析,优化。 空间数据类型(存储)

   MySQL支持以下数据类型:

   Geometry:可以存储所有的几何类型

   Point:简单点

   LINESTRING:简单线

   POLYGON:简单面

   MULTIPOINT:多点

   MULITILINESTRING:多线

   MUILITIPOLYGON:很多方面

   GEOMETRYCOLLECTION:任何几何集合

   在创建表的时候可以根据需求选择合适的几何类型存储你的空间数据。

 

 

  1. 复合json

建表,可以直接在啊navicate里面写json。。虽然美育列出来

 

    1. Enum 枚举类型 set

SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。

  1. 问题,,
    1. navacite 不支持查询json问题,可能是版本太低,使用java直接查询
    2. Json索引问题

使用虚拟咧解决

 

Josn数据的操作

 

  1. JSON数据查询:

 

    1. 2)插入数据

-- 插入含有json数组的记录
INSERT INTO oper_log(oper_name,oper_detail ) VALUES( 'admin', JSON_ARRAY(1, "course", NULL, TRUE, CURTIME()));

-- 插入含有json对象的记录
-- 可以使JSON_OBJECT()方法来创建json对象,方法内带有偶数个参数,一个键一个值得形式转换为json
INSERT INTO oper_log(oper_name,oper_detail ) VALUES( 'admin', JSON_OBJECT("course", "维修保养课程", "currentTime", now()));
-- 如果如下面向JSON_OBJECT()方法传入奇数个参数,会报错:Incorrect parameter count in the call to native function 'JSON_OBJECT'
INSERT INTO oper_log(oper_name,oper_detail ) VALUES( 'admin', JSON_OBJECT("course", "维修保养课程", "currentTime"));//错误的
-- 还可以使用json字符串的形式传入json对象
INSERT INTO oper_log(oper_name,oper_detail ) VALUES( 'admin', '{"course":"数据结构课程", "currentTime":"2018-010-1 14:01:00"}');
-- 一定要转换为字符串,如下直接传入对象,会报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"course":"数据结构课程", "currentTime":"2018-010-1 14:01:00"})' at line 1
INSERT INTO oper_log(oper_name,oper_detail ) VALUES( 'admin', {"course":"数据结构课程", "currentTime":"2018-010-1 14:01:00"}); //错误的

上面插入的数据:

 

说明下,我原来用的navicat发现查josn的时候是空 select * 的时候定义的json字段会不显示,然后换了新版本就好了。

 

通过dollar语法模式,,或者json系列函数来完成即可。。

 

    1. 首先通过json对象中的某个键值对来做条件查询

SELECT * FROM user_json_test where json_content -> '$.flag'=0;
SELECT * FROM user_json_test where JSON_EXTRACT(json_content,'$.flag') =0;



JSON_EXTRACT函数的语法为:JSON_EXTRACT(字段名,‘$.key’),这个函数可以在条件中使用,也可以在查询的时候使用。如下

 

    1. 其他JSON函数

下面介绍一些其他函数。

  • JSON_LENGTH(json_doc[, path])
    计算JSON对象或字段的value的长度(key-value的数量或者数组的长度)
  • JSON_TYPE(json_val)
    查询数据结果的数据类型。

SELECT JSON_TYPE(json_content) FROM user_json_test where id = 2;
SELECT JSON_TYPE(JSON_EXTRACT(json_content, '$.array'))FROM user_json_test WHERE id = 1;
第一个结果是:object;第二个结果是:array

  • JSON_VALID(val)
    查询结果是否是JSON。

 

    1. 我们进一步来演示把authors 这个KEY对应的所有对象删掉。

?

1

2

3

4

mysql> UPDATE json_test

  -> SET person_desc = json_remove(person_desc,'$.authors')\G

Query OK, 1 row affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

 

暂时就写这么多吧,后续再进行补充。本人也是刚开始接触mysql的json,如果有问题请指教~



 

 

  1. ref

 

【mysql】字段支持JSON类型 - awildfish - 博客园.html

(9+条消息)mysql数据库 geometry, point, polygon类型,地理空间数据库查询操作 - 一个球_的博客 - CSDN博客.html

MySQL · 最佳实践 · 如何索引JSON字段 - 简书.html

【mysql】字段支持JSON类型 - awildfish - 博客园.html

 

MySQL __ MySQL 5.7 Reference Manual __ 13.1.18 CREATE TABLE Syntax.html

mysql json类型的一些说明 - 简书.html

MySQL JSON数据类型 - 守望一心 - 博客园.html

posted @ 2019-08-05 20:35  attilaxAti  阅读(28)  评论(0编辑  收藏  举报