电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

mysql json格式數據查詢操作

瀏覽:5日期:2023-10-08 12:39:07

預設表名是 base_data , json列名是 json_value

json_value的值是

{“ids”:[“a”,“b”],“datas”:[{“name”:“張三”}]}

那么查詢語句應該是

select * from base_data where JSON_CONTAINS(json_value -> '$.ids', JSON_ARRAY(’a’));

或者

select * from base_data where JSON_CONTAINS(json_value -> '$.ids[*]', JSON_ARRAY(’a’));

兩種都行,具體什么區別暫時還不得而知

補充知識:mysql中varchar字段長度超過限制長度自動截取的問題-----MySQL的sql_mode模式說明及設置

MySQL的sql_mode合理設置

sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數據的插入。在生產環境必須將這個值設置為嚴格模式,所以開發、測試環境的數據庫也必須要設置,這樣在開發測試階段就可以發現問題.

sql model 常用來解決下面幾類問題

(1) 通過設置sql mode, 可以完成不同嚴格程度的數據校驗,有效地保障數據準備性。

(2) 通過設置sql model 為寬松模式,來保證大多數sql符合標準的sql語法,這樣應用在不同數據庫之間進行遷移時,則不需要對業務sql 進行較大的修改。

(3) 在不同數據庫之間進行數據遷移之前,通過設置SQL Mode 可以使MySQL 上的數據更方便地遷移到目標數據庫中。

sql_mode常用值如下:

ONLY_FULL_GROUP_BY:

對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那么這個SQL是不合法的,因為列不在GROUP BY從句中

NO_AUTO_VALUE_ON_ZERO:

該值影響自增長列的插入。默認設置下,插入0或NULL代表生成下一個自增長值。如果用戶 希望插入的值為0,而該列又是自增長的,那么這個選項就有用了。

STRICT_TRANS_TABLES:

在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做限制

NO_ZERO_IN_DATE:

在嚴格模式下,不允許日期和月份為零

NO_ZERO_DATE:

設置該值,mysql數據庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE過程中,如果數據被零除,則產生錯誤而非警告。如 果未給出該模式,那么數據被零除時MySQL返回NULL

NO_AUTO_CREATE_USER:

禁止GRANT創建密碼為空的用戶

NO_ENGINE_SUBSTITUTION:

如果需要的存儲引擎被禁用或未編譯,那么拋出錯誤。不設置此值時,用默認的存儲引擎替代,并拋出一個異常

PIPES_AS_CONCAT:

將'||'視為字符串的連接操作符而非或運算符,這和Oracle數據庫是一樣的,也和字符串的拼接函數Concat相類似

ANSI_QUOTES:

啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因為它被解釋為識別符

ORACLE的sql_mode設置等同:

PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

如果使用mysql,為了繼續保留大家使用oracle的習慣,可以對mysql的sql_mode設置如下:

在my.cnf添加如下配置

[mysqld]

sql_mode=’ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES’

注意:

MySQL5.6和MySQL5.7默認的sql_mode模式參數是不一樣的,5.6的mode是NO_ENGINE_SUBSTITUTION,其實表示的是一個空值,相當于沒有什么模式設置,可以理解為寬松模式。5.7的mode是STRICT_TRANS_TABLES,也就是嚴格模式。

如果設置的是寬松模式,那么我們在插入數據的時候,即便是給了一個錯誤的數據,也可能會被接受,并且不報錯,例如:我在創建一個表時,該表中有一個字段為name,給name設置的字段類型時char(10),如果我在插入數據的時候,其中name這個字段對應的有一條數據的長度超過了10,例如’1234567890abc’,超過了設定的字段長度10,那么不會報錯,并且取前十個字符存上,也就是說你這個數據被存為了’1234567890’,而’abc’就沒有了,但是我們知道,我們給的這條數據是錯誤的,因為超過了字段長度,但是并沒有報錯,并且mysql自行處理并接受了,這就是寬松模式的效果,其實在開發、測試、生產等環境中,我們應該采用的是嚴格模式,出現這種錯誤,應該報錯才對,所以MySQL5.7版本就將sql_mode默認值改為了嚴格模式,并且我們即便是用的MySQL5.6,也應該自行將其改為嚴格模式,而你記著,MySQL等等的這些數據庫,都是想把關于數據的所有操作都自己包攬下來,包括數據的校驗,其實好多時候,我們應該在自己開發的項目程序級別將這些校驗給做了,雖然寫項目的時候麻煩了一些步驟,但是這樣做之后,我們在進行數據庫遷移或者在項目的遷移時,就會方便很多,這個看你們自行來衡量。mysql除了數據校驗之外,你慢慢的學習過程中會發現,它能夠做的事情還有很多很多,將你程序中做的好多事情都包攬了。

改為嚴格模式后可能會存在的問題:

若設置模式中包含了NO_ZERO_DATE,那么MySQL數據庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。例如表中含字段TIMESTAMP列(如果未聲明為NULL或顯示DEFAULT子句)將自動分配DEFAULT ’0000-00-00 00:00:00’(零時間戳),也或者是本測試的表day列默認允許插入零日期 ’0000-00-00’ COMMENT ’日期’;這些顯然是不滿足sql_mode中的NO_ZERO_DATE而報錯。

模式設置和修改(以解決上述問題為例):

方式一:

先執行select @@sql_mode,復制查詢出來的值并將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然后執行set sql_mode = ’修改后的值’或者set session sql_mode=’修改后的值’;,例如:set session sql_mode=’STRICT_TRANS_TABLES’;改為嚴格模式

此方法只在當前會話中生效,關閉當前會話就不生效了。

方式二:

先執行select @@global.sql_mode,復制查詢出來的值并將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然后執行set global sql_mode = ’修改后的值’。

此方法在當前服務中生效,重新MySQL服務后失效

方法三:在mysql的安裝目錄下,或my.cnf文件(windows系統是my.ini文件),新增

sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,

添加my.cnf如下:

[mysqld]

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

然后重啟mysql。

此方法永久生效.當然生產環境上是禁止重啟MySQL服務的,所以采用方式二加方式三來解決線上的問題,那么即便是有一天真的重啟了MySQL服務,也會永久生效了。

以上這篇mysql json格式數據查詢操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 常州减速机_减速机厂家_常州市减速机厂有限公司 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 媒介云-全网整合营销_成都新闻媒体发稿_软文发布平台 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 顺辉瓷砖-大国品牌-中国顺辉 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 南京欧陆电气股份有限公司-风力发电机官网| 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 济南菜鸟驿站广告|青岛快递车车体|社区媒体-抖音|墙体广告-山东揽胜广告传媒有限公司 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | LNG鹤管_内浮盘价格,上装鹤管,装车撬厂家-连云港赛威特机械 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 |