說說 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)
這裡需要注意的是:
-
JSON列儲存的必須是JSON格式資料,否則會報錯。
-
JSON資料型別是沒有預設值的。
Varchar VS JSON
大家都應該知道,在沒有JSON資料型別時,還不是一樣可以使用varchar型別或text型別來儲存就JSON格式的字串,那麼,JSON格式到底哪些“過人"之處呢?好處還真不少呢。
-
JSON資料型別,會自動校驗資料是否為JSON格式,如果不是JSON格式資料,則會報錯。
-
MySQL提供了一組操作JSON資料的內建函式。
-
優化的儲存格式,儲存在JSON列中的JSON資料被轉換成內部的儲存格式。其允許快速讀取。
-
可以修改特定的鍵值,(如果之前在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)
這裡需要注意的是:
-
如果引數為null值,顯示也為Null值。
-
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)
- 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 版本中,才正式引入
MySQL中 JSON 資料型別應用
前言 今天接觸到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 # 建立資