国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數據庫 > MySQL > 正文

MySQL5.7中的sql_mode默認值帶來的坑及解決方法

2024-07-25 19:09:12
字體:
來源:轉載
供稿:網友

在正常項目開發過程中,如果MySQL版本從5.6升級到5.7版本。作為DBA在考慮數據庫版本升級帶來的影響時,一般會有幾個注意點:

sql_modeoptimizer_switch

本文主要內容是MySQL升級到5.7版本之后,由于默認的 sql_mode 值帶來的坑以及對應的解決方案。

案例一:ONLY_FULL_GROUP_BY

問題描述

MySQL版本從5.6升級至5.7之后,部分SQL執行報錯,報錯信息如下:

ERROR 1055 (42000): Expression #3 of XXXXXX list is not in GROUP BY clause and contains nonaggregated column ‘XXXXX.XXXXXX' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

這個問題原因在于從5.6升級至5.7版本后 sql_mode 默認值發生了改變,在5.7版本的 sql_mode 默認值中有意向 ONLY_FULL_GROUP_BY ,該選項的含義表示:對于使用 GROUP BY 進行查詢的SQL,不允許 SELECT 部分出現 GROUP BY 中未出現的字段,也就是 SELECT 查詢的字段必須是 GROUP BY 中出現的或者使用聚合函數的。

解決方案

方案一(不推薦):修改5.7版本 sql_mode 值,將 ONLY_FULL_GROUP_BY 去掉

ONLY_FULL_GROUP_BY 是加強SQL規范的,其目的是讓SQL查詢出來的結果更符合規范,更準確。

如果沒有 ONLY_FULL_GROUP_BY 規范限制,那么則能允許以下SQL的執行: SELECT a,b,c FROM t GROUP BY a 。SQL按照a字段值進行分組,當同一個a字段值對應多個b或者c值時,查詢結果中的b,c值是不確定的。

方案二:改寫SQL

案例二:NO_ZERO_DATE & NO_ZERO_IN_DATE & time_zone

問題描述

排錯階段一

MySQL版本從5.6升級至5.7之后,創建表的過程中失敗:

mysql> CREATE TABLE `t_manager` (  .....  ->  `CREATE_DATETIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',  ->  `MODIFIER` varchar(32) DEFAULT NULL COMMENT '更新人',  ->  `MODIFY_DATETIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',  ->  `IS_DELETED` bit(1) DEFAULT b'0' COMMENT '刪除狀態 1:刪除 0:未刪除',  ->  `IS_ENABLE` bit(1) DEFAULT b'1' COMMENT '啟用狀態 1:啟用 0:禁用',  ->  PRIMARY KEY (`CACHE_ID`)  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;ERROR 1067 (42000): Invalid default value for 'MODIFY_DATETIME'

錯誤提示 MODIFY_DATETIME 字段設置的默認值是無效的,考慮到剛從5.6版本升級到5.7版本,于是又去翻了翻5.7中默認的 sql_mode 值。結果發現了兩個可能存在影響的選項:

NO_ZERO_DATE
NO_ZERO_IN_DATE

排錯階段二

于是解決方案就是按照 NO_ZERO_DATE 以及 NO_ZERO_IN_DATE 的要求設置默認值,將 MODIFY_DATETIME 字段默認值設置為'1001-01-01 01:01:01',結果發現還是無法成功創建表:

mysql>CREATE TABLE `t_manager` (  .....  ->  `CREATE_DATETIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',  ->  `MODIFIER` varchar(32) DEFAULT NULL COMMENT '更新人',  ->  `MODIFY_DATETIME` timestamp NOT NULL DEFAULT '1001-01-01 01:01:01' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',  ->  `IS_DELETED` bit(1) DEFAULT b'0' COMMENT '刪除狀態 1:刪除 0:未刪除',  ->  `IS_ENABLE` bit(1) DEFAULT b'1' COMMENT '啟用狀態 1:啟用 0:禁用',  ->  PRIMARY KEY (`CACHE_ID`)  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;ERROR 1067 (42000): Invalid default value for 'MODIFY_DATETIME'

查看了所有的 sql_mode 值,都符合規范,但是表還是創建不成功。只好去官方手冊上找找timestamp介紹:

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of ‘1970-01-01 00:00:01' UTC to ‘2038-01-19 03:14:07' UTC.

排錯階段三

可以看到官方定義中timestamp字段值的范圍是'1970-01-01 00:00:01'到'2038-01-19 03:14:07',原來是我們設置的默認值不在timestamp范圍之內。于是再次修改默認值:

mysql>CREATE TABLE `t_manager` (  .....  ->  `CREATE_DATETIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',  ->  `MODIFIER` varchar(32) DEFAULT NULL COMMENT '更新人',  ->  `MODIFY_DATETIME` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',  ->  `IS_DELETED` bit(1) DEFAULT b'0' COMMENT '刪除狀態 1:刪除 0:未刪除',  ->  `IS_ENABLE` bit(1) DEFAULT b'1' COMMENT '啟用狀態 1:啟用 0:禁用',  ->  PRIMARY KEY (`CACHE_ID`)  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;ERROR 1067 (42000): Invalid default value for 'MODIFY_DATETIME'

邪了門,居然還是無法成功創建表。實在是沒轍了,向同事求救,同事說他在機器上試試,結果同樣的語句在他的MySQL上執行成功,同樣是5.7.23版本。

百思不得其解。

一氣之下將兩邊的參數值拿出來對比了一下,果然找到了不同的根本。

 

測試環境 同事環境
system_time_zone=CST system_time_zone UTC
time_zone='+08:00' time_zone=SYSTEM

 

回過頭來看timestamp字段定義的范圍:

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of ‘1970-01-01 00:00:01' UTC to ‘2038-01-19 03:14:07' UTC.

這個時間范圍指的是UTC時區的時間范圍,測試環境設置了CST東八區的時區,則對應的時間范圍上也需要對應的加8小時。所以將timestamp字段默認值修改為'1970-01-01 08:00:01',表終于創建成功。

mysql>CREATE TABLE `mn_cache_refresh_manager` (  ......  ->  `CREATE_DATETIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',  ->  `MODIFIER` varchar(32) DEFAULT NULL COMMENT '更新人',  ->  `MODIFY_DATETIME` timestamp NOT NULL DEFAULT '1970-01-01 08:00:01' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',  ->  `IS_DELETED` bit(1) DEFAULT b'0' COMMENT '刪除狀態 1:刪除 0:未刪除',  ->  `IS_ENABLE` bit(1) DEFAULT b'1' COMMENT '啟用狀態 1:啟用 0:禁用',  ->  PRIMARY KEY (`CACHE_ID`)  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.02 sec)

總結

以上所述是小編給大家介紹的MySQL5.7中的sql_mode默認值帶來的坑及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产精品秘入口| 在线免费观看你懂的| 亚洲第一页在线播放| 精品推荐国产麻豆剧传媒| 国产三级在线看| 国产桃色电影在线播放| 精品一区二区三区在线成人| 91涩漫在线观看c| 亚洲精品一区中文字幕电影| 日本动漫理论片在线观看网站| www.三区| 国产一二三区在线| 精品卡1卡2卡三卡免费网站| av黄色在线观看| 精品无吗乱吗av国产爱色| 亚洲videos| 国产亚洲精品自在线观看| 精品三级久久久久久久电影聊斋| 牛牛热在线视频| 91蜜桃在线视频| 国产卡二和卡三的视频| 在线免费观看你懂的| 国产午夜视频| 尤物在线网址| 欧美韩日国产| 亚洲精品白浆| 99热免费观看| 999国产在线视频| 国产精品一区二区三区视频网站 | 国产在线一区二区视频| 国产黄网站在线观看| 蜜桃av网站| 亚洲视频日韩| 国产高潮av| 综合激情亚洲| 国产免费黄网站| www.香蕉视频在线观看| 国产xxxxx| 国产高清在线a视频大全| 天天操夜夜摸| 国产专区在线播放| 久久精品最新免费国产成人| 亚洲欧美自拍另类| 亚洲综合色视频在线观看| 国产成人亚洲欧美电影| 国产精品美女一区二区三区四区| 国产在线传媒| 黄色毛片在线| 国产美女视频一区二区三区| 激情丁香婷婷| 国产精品臀控福利在线观看| 国产在线三区| 国产性一级片| 97影院秋霞午夜在线观看| 2021天堂中文幕一二区在线观| 最近中文字幕av免费高清| 激情六月婷婷| 国产一二三区精品视频| 国产叼嘿网站免费观看不用充会员| 国产羞羞视频在线观看| √天堂资源中文www| 在线观看wwww| 青青青青在线| 国产亚av手机在线观看 | 高清视频一区二区三区四区| 国产免费麻豆视频| 国产探花视频在线观看| 亚洲视频网站在线| 成年人在线观看| 五月婷婷开心综合| 99久久99热久久精品免费看| 免费视频中文字幕| 国产呻吟对白刺激无套视频在线| 99在线欧洲视频| 天堂资源在线中文| av免费在线观看网站| 国内精品不卡| 四虎a级欧美在线观看| 国产原创在线播放| 亚洲视频手机在线观看| 国产高清在线| 国产小视频在线观看| 一级二级在线观看| 国产网站观看9久| av网址在线看| 69久久精品| 国产私人影院| 最近中文av字幕在线中文| 亚洲成人电视网| 精品国产一区二区三区四区阿崩 | 久久99亚洲网美利坚合众国 | 91看片在线观看| 国产麻豆一区二区三区精品 | 日本韩国精品一区二区| 91最新在线| 国产区视频在线观看| 国内外激情在线| 四虎国产精品永久地址998| 国产福利一区二区在线精品| 国产精品一品| 国产一级影片| 国产视频资源| 69国产精品视频| 国产成+人+亚洲+欧美+综合| 69久久久久| 91在线最新| 91久久精品国产性色| 国产精品久久久久白浆| 国产精品666| 96久久久久久| 精品国语对白精品自拍视| 国产区视频在线| 精品一区二区91| 日日夜夜中文字幕| 精品中文字幕不卡在线视频| 丁香花高清视频完整版在线观看| 免费一区二区三区视频狠狠| 日本卡一卡2卡3卡4精品卡网站| 亚洲大香人伊一本线| 久久综合精品视频| 国产一起色一起爱| 精品一区二区三区在线观看l| 在线免费观看黄色av| 欧美性猛交p30| 国产一二三区精品视频| 18 激情视频在线| 任你操在线观看| 中文字幕一区免费| 亚洲人av在线| 中文字幕国产在线| 日本成人网址| 国产精品白浆流出视频| 日本高清不卡中文字幕| 国产视频1区| 非洲黑人最猛性xxxx交| 国产91在线视频蝌蚪| av免费在线免费| 成人欧美亚洲| 免费精品国产自产拍观看| 国产黄色片在线播放| 成人精品福利| 青青草视频在线免费观看| 国产精品18久久久久网站| 国产你懂的在线观看| jizz在线免费观看| 国产二区在线播放| 中文字幕视频在线免费| 欧美精品久久久久久久小说| 精品女厕厕露p撒尿| 国产一级在线观看| 国产中文字幕在线观看| 99热免费观看| 92国产在线视频| 国产精品久久久高清免费| 丁香视频免费观看| 久热国产在线视频| 精品中文字幕不卡在线视频| 亚洲欧美中文字幕在线观看| 国产黄色免费| 精品视频一二区| 精品a在线观看| 精品视频一二区| 精品亚洲综合| 在线久久视频| 99在线免费视频| 亚洲第一页在线播放| 在线视频三级| a视频免费看| 成人欧美亚洲| 国产精品剧情一区二区三区 | 亚洲久草视频| 开心丁香婷婷深爱五月| 免费在线观看a| 国产农村一级特黄α**毛片| 高清av中文在线字幕观看1| 国产免费黄色| 国产成人精品自线拍| 999精品网| 日韩a视频在线观看| 黄色av网站在线| 国产探花在线观看| 一区二区三区免费视频网站| 亚洲an天堂an在线观看| 国产免费自拍视频| 国产www.大片在线| 黄色三级视频在线观看| 国产网红在线| 麻豆福利在线观看| 国产精品18久久久久久久久久 | 激情丁香婷婷| 国产日本视频| 欧美日韩在线视频免费观看 | jlzzjlzz欧美| 国产对白国语对白| 九九热视频在线观看| 国产黄在线看| 国产免费黄网站| www.操.com| 国产www网站| 国产美女在线播放|