1. 程式人生 > >說說 MySQL JSON 資料型別

說說 MySQL JSON 資料型別

本文首發於個人微信公眾號《andyqian》

前言

  今天我們來說一說,MySQL JSON資料型別,JSON我相信大家都已經很熟悉了,(Java物件與JSON互轉,可以檢視《fastjson詳解》這篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 JSON資料型別。在次之前,我們通常使varchar或text資料型別儲存JSON格式資料。

如何使用JSON?

  在這一章節,不再具體介紹JSON格式以及語法,我們來介紹一下,在MySQL中如何建立JSON資料列。 語法:

create table t_base_data(
id bigint(20) not null primary key
auto_increment, content json )

新增資料:

mysql> insert into t_base_data (content)values('{"blog": "www.andyqian.com", "account": "andyqian"}');
Query OK, 1 row affected (0.01 sec)

這裡需要注意的是:

  1. JSON列儲存的必須是JSON格式資料,否則會報錯。

  2. JSON資料型別是沒有預設值的。

Varchar VS JSON

  大家都應該知道,在沒有JSON資料型別時,還不是一樣可以使用varchar型別或text型別來儲存就JSON格式的字串,那麼,JSON格式到底哪些“過人"之處呢?好處還真不少呢。

  1. JSON資料型別,會自動校驗資料是否為JSON格式,如果不是JSON格式資料,則會報錯。

  2. MySQL提供了一組操作JSON資料的內建函式。

  3. 優化的儲存格式,儲存在JSON列中的JSON資料被轉換成內部的儲存格式。其允許快速讀取。

  4. 可以修改特定的鍵值,(如果之前在MySQL中儲存過JSON格式字串的小夥伴,應該經歷過每次修改一個值,都要將整個JSON字串更新一遍的尷尬。)

你看,上面這些好處,誘惑足夠大嗎?

常用JSON函式

  MySQL中,給我們提供了不少JSON相關的函式,簡直讓我們愛不釋手,下面一一來介紹常用的JSON函式。

注意:以下示例MySQL版本為: 5.7.20

1. JSON_TYPE 函式

作用: 顯示當前JSON字串的型別。

例如:

mysql> select json_type('"hello"');
+----------------------+
| json_type('"hello"') |
+----------------------+
| STRING               |
+----------------------+
1 row in set (0.00 sec)

集合型別:

mysql> select json_type('["andyqian","Java","xingming"]');
+---------------------------------------------+
| json_type('["andyqian","Java","xingming"]') |
+---------------------------------------------+
| ARRAY                                       |
+---------------------------------------------+
1 row in set (0.00 sec)

2. JSON_ARRAY 函式
作用: 將陣列物件轉換為json陣列
例如:

mysql> select json_array(1,now(),"andyqian");
+-----------------------------------------------+
| json_array(1,now(),"andyqian")                |
+-----------------------------------------------+
| [1, "2017-12-07 23:05:41.000000", "andyqian"] |
+-----------------------------------------------+
1 row in set (0.00 sec)

其中json_array引數待轉換為json的物件集合,對Java熟悉的童鞋,可以看成是集合。

3. JSON_OBJECT 函式
語法:JSON_OBJECT(key,value,key1,value1)
作用:將物件轉換為json格式資料
例如:

mysql> select json_object('name','鞠騫','account','andyqian');
+---------------------------------------------------+
| json_object('name','鞠騫','account','andyqian')   |
+---------------------------------------------------+
| {"name": "鞠騫", "account": "andyqian"}           |
+---------------------------------------------------+
1 row in set (0.00 sec)

4. JSON_QUOTE 函式
作用: 引用字串作為json值。
例如:

mysql> select json_quote('"andyqian"');
+--------------------------+
| json_quote('"andyqian"') |
+--------------------------+
| "\"andyqian\""           |
+--------------------------+
1 row in set (0.00 sec)

這裡需要注意的是:

  1. 如果引數為null值,顯示也為Null值。

  2. JSON_UNQUOTE 函式與JSON_QUOTE 函式作用正好相反。

5. JSON_MERGE函式
作用: 合併JSON字串
例如:

mysql> select json_merge('{"blog":"www.andyqian.com"}','{"account":"andyqian"}');
+--------------------------------------------------------------------+
| json_merge('{"blog":"www.andyqian.com"}','{"account":"andyqian"}') |
+--------------------------------------------------------------------+
| {"blog": "www.andyqian.com", "account": "andyqian"}                |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)
  1. JSON_VALID 函式

作用: 判斷JSON格式是否有效 例如:

mysql> select json_valid("andyqian"),json_valid('"andyqian"'),json_valid(null);
+------------------------+--------------------------+------------------+
| json_valid("andyqian") | json_valid('"andyqian"') | json_valid(null) |
+------------------------+--------------------------+------------------+
|                      0 |                        1 |             NULL |
+------------------------+--------------------------+------------------+
1 row in set (0.00 sec)

這裡需要注意的是: 0 表示無效,1 表示有效,NUll 表示引數為null。

MySQL提供了不少操作JSON資料的函式,這裡只給出一些常見的函式,更多請參考官網檢視。

小結

  由於上面描述了不少重要的函式,避免帶來閱讀疲勞,今天就不寫命令了。另外,今天數了數,MySQL系列文章,也有十多篇了,感覺還有不少東西,可以記錄,這個系列還會寫一段時間,在這期間,你們有想讓我分享的文章,也可以留言哦。

PS:我負責寫文章,你們幫忙點贊,留言,轉發可好?

推薦文章


掃碼關注,一起進步

個人部落格: http://www.andyqian.com


相關推薦

說說 MySQL JSON 資料型別

本文首發於個人微信公眾號《andyqian》 前言   今天我們來說一說,MySQL JSON資料型別,JSON我相信大家都已經很熟悉了,(Java物件與JSON互轉,可以檢視《fastjson詳解》這篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 

MySQLJSON 資料型別應用

前言      今天接觸到mysql中json資料型別,之前不知道有這個型別,今天學習一下。     JSON我相信大家都已經很熟悉了,但在 MySQL中,直至 5.7 版本中,才正式引入 JSON資料型別。在次之前,我們通常使varchar或text資料型別儲存JSON格式

4 Mysql資料型別

 一 1.1 建立表 CREATE TABLE t1( id1 int, id2 INT(5) ); DESC t1;     2  插入資料檢視 INSERT INTO t1 VALUES(1,1); SELECT * from t1;

mysql java資料型別對照表

Java資料型別和MySql資料型別對應表 java mysql 資料型別對照 型別名稱 顯示長度 資料庫型別 JAVA型別 J

mysql資料型別和select語句(group by、 limit)

mysql之資料型別的理解 mysql資料型別之整形 mysql資料型別之浮點型 mysql資料型別之日期時間型 mysql資料型別之字元型 刪除記錄(單表刪除) delete from 表單 where id=5 select

mysql基本資料型別和約束條件

mysql基本資料型別 1.建立表的完整語法 create table 表名(欄位1 型別[(寬度) 約束條件],欄位2 型別[(寬度) 約束條件]); # 注意:1.在同一張表中,欄位名不能相同;2.寬度和約束條件可選,欄位名和型別是必須的; # 型別:使用限制欄位必須以什麼樣的資料型別傳值 # 約束條

mysql資料庫----資料型別

一、數值型別 1、整型 整數型別:TINYINT SMALLINT MEDIUMINT INT BIGINT 我們完全沒必要為整數型別指定顯示寬度,使用預設的就可以了 預設的顯示寬度,都是在最大值的基礎上加1   2、浮點型  浮點型:FLOAT DOUBLE 定點數:

mysql資料型別int、bigint、smallint 和 tinyint取值範圍

目錄 int 註釋 使用整數資料的精確數字資料型別。 bigint         從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型資料(所有數字)。儲存大

mysql資料型別選擇

一Mysql 資料型別選擇 ​​​​​​​1.1 Char與varchar 由於char是固定長度的,所以存取速度比varchar快。缺點是浪費儲存空間,程式需要對行尾進行處理,所以對那些長度變化不大,並且對查詢速度有較高要求的資料可以通過char來存取。當然這個也是由

mysql常用資料型別

常用資料型別:   數值型別: bit, boolean tinyint(對應java的byte) smallint(對應java的short), int, bigint(對應java的long) float, double 。 文字、二進位制型別: c

mysql資料型別之日期時間型別

常用的日期時間型別: DATE ;TIME; DATETIME ;TIMESTAMP 。 (1)根據實際需要選擇滿足應用的最小儲存的日期型別 (2)記錄年份比較久遠,最好要使用DATETIME。因為TIMESTAMP表示的日期範圍要短很多。 (3)如果讓不同的時區保持

資料庫基礎02——MySQL常用資料型別

資料庫基礎02——MySQL常用資料型別 在這裡宣告一下 mysql 5.5.的文件,如果公司確定用mysql,直接看文件最詳細 https://dev.mysql.com/doc/refman/5.5/en/ mysql主要的資料型別: 1、串資料型別 2、數值資料型別

mysql json資料引號處理

問題描述:新版本中引入的json資料檢索時獲取某欄位值時帶引號 場景: 檢視mysql版本: select version(); 資料庫資料:tabel表中data 欄位中的資料 資料取出後格式化如下(假資料): {     "address": {     

Mysql資料型別

MySQL資料型別可分為3類:數值型別、日期和時間型別、字串(字元)型別 數值型別: tinyint[(M)] [UNSIGNED] [ZEROFILL] //M(預設值) 4 非常小整數值 smallint[(M)] [UNS

MySQL筆記——資料型別

MySQL支援的資料型別     MySQL提供了多種資料型別,主要包括數值型、字串型別、日期和時間型別。可以在MySQL的幫助文件中,查閱當前MySQL版本所支援的資料型別,以及資料型別的詳細使用說明。 開啟MySQL命令視窗,輸入命令: ? data types;

MySQL分鐘資料型別的區別

char、varchar、text、ntext、 bigint、int、smallint、tinyint和bit的區別及資料庫的資料型別 Varchar 對每個英文(ASCII)字元都佔用2個位元組,對一個漢字也只佔用兩個位元組 char 對英文(ASCII)字元佔用1個位元組,對一個漢字佔用2個位

MySQL日期資料型別、相互轉換、處理函式總結

1. MySQL的日期主要有以下三種資料型別 資料型別 示例 備註 date 2017-01-01 day級 timestamp 2017-01-01 00:00:00 second級 bigint 1483200000000 時間戳(毫秒) 2.三種資料型別的相互轉換 (

MySQL系列-使用JDBC操作MySQL常用資料型別

那麼這些資料對應的java型別是那些呢,又該如何使用jdbc進行操作呢?1.插入和獲取日期型別表的設計如下表中資料如下:如何從結果集中獲取這些型別的資料呢?第一個date型別,我們可以使用getDate()方法獲取。例如:Date d = resultSet.getDate(

mysql 資料庫快速入門 MySQL資料型別

目錄 MySQL 資料型別 數值型別 字串(字元)型別 日期/時間型別 MySQL 資料型別 MySQL支援所有標準SQL數值資料型別。 資料欄位的型別對資料庫的優化是非常重要的,合理的使用資料型別,對資料庫的真來說都是有益的。 MySQL支援多種型別,大致可以分

mysql decimal資料型別轉換

最近在工作遇到資料庫中存的資料型別是: decimal(14,4) 遇到的問題是: 當我使用python 讀取到記憶體中時,總是帶著 decimal字元, 再寫入其它mysql表中時,資料型別為int型,導致資料入庫不成功. import pymysql # 建立資