成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

談談MySQL中的隱式轉換

瀏覽:113日期:2023-10-10 10:08:42

工作過程中會遇到比較多關于隱式轉換的案例,隱式轉換除了會導致慢查詢,還會導致數據不準。本文通過幾個生產中遇到的案例來。

基礎知識

關于比較運算的原則,MySQL官方文檔的描述: https://dev.mysql.com/doc/refman/5.6/en/type-conversion.html

如果 判斷符號左右兩邊有一個為NULL,結果就是null,除非使用安全的等值判斷 <=>

(none) 05:17:16 >select null = null;+-------------+| null = null |+-------------+|NULL |+-------------+1 row in set (0.00 sec)(none) 05:34:59 >select null <=> null;+---------------+| null <=> null |+---------------+| 1 |+---------------+1 row in set (0.00 sec)(none) 05:35:51 >select null != 1;+-----------+| null != 1 |+-----------+| NULL |+-----------+1 row in set (0.00 sec)

如何判斷左右兩邊都是相同類型的,比如都是字符串,則以字符串進行對比。如果是數字,則以數字進行比較。

注意 對于比較常見的 字符串與數字類型的比較的情況,如果字符串字段是索引字段,那么MySQL 無法通過索引進行查找數據,比如以下例子:

(none) 05:39:42 >select 1=’1’;+-------+| 1=’1’ |+-------+| 1 |+-------+1 row in set (0.00 sec)(none) 05:39:44 >select 1=’1A’;+--------+| 1=’1A’ |+--------+| 1 |+--------+1 row in set, 1 warning (0.00 sec)(none) 05:39:47 >select 1=’1 ’; ##1后有空格+--------+| 1=’1 ’ |+--------+| 1 |+--------+1 row in set (0.00 sec)

MySQL 認為數字1 與’1’,’1_’,’1A’ 相等,故無法通過索引二分查找準確定位到具體的值。

Hexadecimal(十六進制)以二進制字符串的方式進行比較。

如何判斷符號左邊是 timestamp 或者datetime類型的,右邊是常量,在比較之前,常量會被轉換為時間類型。

隱式轉換

字段類型不一樣

In all other cases, the arguments are compared as floating-point (real) numbers.

除了以上的其他類型的比較,系統將字段和參數轉換為浮點型進行比較。使用浮點數(或轉換為浮點數的值)的比較是近似的,因為這樣的數字是不精確的。看下面2個例子

>select ’190325171202362933’ = 190325171202362931;+-------------------------------------------+| ’190325171202362933’ = 190325171202362931 |+-------------------------------------------+| 1 |+-------------------------------------------+1 row in set (0.00 sec)>select ’190325171202362936’ = 190325171202362931;+-------------------------------------------+| ’190325171202362936’ = 190325171202362931 |+-------------------------------------------+| 1 |+-------------------------------------------+1 row in set (0.00 sec)

直觀上不相等的值,做等值判斷之后竟然返回為1。這樣帶來2個問題不能利用索引且結果數據不準

>select ’190325171202362931’+0.0;+--------------------------+| ’190325171202362931’+0.0 |+--------------------------+| 1.9032517120236294e17 |+--------------------------+1 row in set (0.00 sec)>select ’190325171202362936’+0.0;+--------------------------+| ’190325171202362936’+0.0 |+--------------------------+| 1.9032517120236294e17 |+--------------------------+1 row in set (0.00 sec)

將上面的值轉換為浮點數,都是 1.9032517120236294e17,所以判斷相等時為真,返回True。

in 參數包含多個類型

具體的案例參考之前的一篇文章MySQL優化案例一則 ,where 條件 in 集合里面的數據類型不一樣,執行計劃未利用到索引

談談MySQL中的隱式轉換

淘寶MySQL月報(http://mysql.taobao.org/monthly/2017/12/06/ )里面有一篇正好和這個一樣的案例,推薦給大家 簡單說,就是在IN的入口有一個判斷, 如果in中的字段類型不兼容, 則認為不可使用索引.

談談MySQL中的隱式轉換

而這個arg_types_compatible 的賦值邏輯是:

if (type_cnt == 1) arg_types_compatible = TRUE;

也就是說,當IN列表中出現超過一個字段類型時, 就認為類型不兼容,從而不能利用索引。

字符集類型不一致

環境準備:

CREATE TABLE `t1` (`id` int(11) NOT NULL AUTO_INCREMENT,`c1` varchar(20) DEFAULT NULL,`c2` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_c1` (`c1`),KEY `idx_c2` (`c2`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`c1` varchar(20) DEFAULT NULL,`c2` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_c1` (`c1`),KEY `idx_c2` (`c2`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;insert into t1(c1,c2) values(’a’,’a’),(’b’,’b’),(’c’,’c’),(’d’,’d’),(’e’,’e’);insert into t2(c1,c2) values(’a’,’a’),(’b’,’b’),(’c’,’c’),(’d’,’d’),(’e’,’e’);

測試結果

談談MySQL中的隱式轉換

小結

希望通過以上案例,基礎知識介紹,開發同學能少走彎路,在開發編寫sql的階段一定要明確字段的類型,尤其是看起來像數字類型的id,xxxid,xxxno 這類字段,實際上可能是字符類型。

以上就是談談MySQL中的隱式轉換的詳細內容,更多關于MySQL 隱式轉換的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩国产在线一| 色婷婷av久久久久久久| 在线一区二区三区四区五区| 一区二区三区资源| 亚洲午夜精品国产| 国产日韩精品一区二区浪潮av| 国产成人精品综合在线观看| 欧美性受xxxx黑人xyx| 日韩二区在线观看| 欧美亚州韩日在线看免费版国语版| 亚洲va欧美va人人爽午夜| 宅男噜噜噜66国产日韩在线观看| 综合色天天鬼久久鬼色| 永久域名在线精品| 亚洲人成亚洲人成在线观看图片| 精品不卡在线| 国产精品久久久久久久蜜臀 | 亚洲专区在线| 亚洲妇女屁股眼交7| 欧美综合国产| 免播放器亚洲一区| 欧美欧美欧美欧美| 粉嫩一区二区三区在线看| 日韩欧美国产综合| 国产乱子轮精品视频| 91精品国产综合久久久久久| 国产成人av电影在线观看| 欧美日韩免费电影| 国产在线视频一区二区| 4438x亚洲最大成人网| 国产乱码精品一区二区三区忘忧草 | 亚洲黄页一区| 亚洲女性喷水在线观看一区| 亚洲精品影院| 亚洲v中文字幕| 欧美日本视频在线| 国产一区啦啦啦在线观看| 欧美成人aa大片| 欧美激情91| 亚洲视频小说图片| 日本久久精品电影| 久久精品国产**网站演员| 欧美精品777| 成人午夜看片网址| 欧美国产97人人爽人人喊| 激情婷婷亚洲| 亚洲女与黑人做爰| 男人的天堂亚洲| 蜜桃视频一区二区三区在线观看| 欧美日本一区二区三区四区| 国产精品亚洲一区二区三区妖精| 日韩一区二区免费视频| 99久久国产综合色|国产精品| 亚洲国产成人自拍| 亚洲免费不卡| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美夫妻性生活| 奇米一区二区三区| 日韩欧美高清在线| 欧美系列一区| 午夜电影一区二区三区| 91福利精品第一导航| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美视频第二页| 日韩在线观看一区二区| 欧美日韩国产片| 成人看片黄a免费看在线| 久久精品夜夜夜夜久久| 99国内精品久久久久久久软件| 亚洲一区二区3| 欧美日韩免费在线视频| 9人人澡人人爽人人精品| 自拍偷拍亚洲综合| 日本乱码高清不卡字幕| 成人综合在线网站| 亚洲色欲色欲www在线观看| 久久蜜桃精品| 福利一区二区在线| 亚洲欧美国产77777| 欧美一区在线看| 亚洲一区二区影院| 在线播放欧美女士性生活| 成人精品国产一区二区4080| 欧美国产丝袜视频| 国产欧美日韩一区二区三区| 国产在线国偷精品免费看| 亚洲国产精品成人久久综合一区| 久久成人国产| 成人黄色片在线观看| 亚洲在线视频免费观看| 日韩欧美在线观看一区二区三区| 亚洲无玛一区| 久草精品在线观看| 国产精品大尺度| 欧美日韩一区二区在线观看| 欧美精品国产一区二区| 毛片av一区二区| 国产亚洲一二三区| 美女日韩在线中文字幕| 国产精品一区一区| 一区二区三区在线高清| 日韩一二三区不卡| 国产精品日韩欧美一区二区三区| 高清不卡一区二区在线| 亚洲精品乱码久久久久| 欧美一二区视频| 国产精品夜夜夜| av网站免费线看精品| 午夜视频久久久久久| 久久综合久久综合亚洲| 久久精品中文| 欧美不卡视频| 美女在线视频一区| 中文字幕亚洲成人| 欧美日韩亚洲综合一区二区三区| 精品动漫3d一区二区三区免费| 国产久卡久卡久卡久卡视频精品| 亚洲人妖av一区二区| 欧美刺激午夜性久久久久久久| 成人高清av在线| 热久久一区二区| 国产精品的网站| 欧美成人官网二区| 精品视频一区二区不卡| 99精品福利视频| 色综合久久中文字幕综合网| 美女视频一区二区| 亚洲三级电影网站| 日韩精品一区二区三区视频播放 | 成人av电影在线网| 日韩成人精品视频| 1024精品合集| 精品少妇一区二区三区免费观看| 色婷婷综合视频在线观看| 亚洲第一在线| 91丨九色丨蝌蚪富婆spa| 男男视频亚洲欧美| 亚洲欧美日韩一区二区| 精品黑人一区二区三区久久 | 欧美日韩情趣电影| 国产伦精品一区二区三区视频孕妇 | 亚洲一级二级在线| 久久久久国产一区二区三区四区| 欧美日韩中文另类| 久久本道综合色狠狠五月| 黄色欧美日韩| 91丨porny丨中文| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产超碰在线一区| 看片的网站亚洲| 亚洲一区二区三区四区五区中文 | 欧美一区二区三区喷汁尤物| 久久综合图片| 一本色道久久综合一区| 欧美日本国产精品| 99久久久久免费精品国产| 精品亚洲成a人在线观看| 亚洲精品成人少妇| 国产精品午夜免费| 久久午夜羞羞影院免费观看| 日韩欧美www| 欧美一区二区三区四区视频| 色就色 综合激情| 久久不射网站| 亚洲欧美日韩精品久久久| 一本色道久久综合一区| 欧美少妇一区| 欧美一站二站| 91视频免费观看| 91小视频免费看| 99久久伊人网影院| 日本伊人精品一区二区三区观看方式| 中文字幕中文字幕在线一区 | 中文字幕欧美区| 久久精品视频在线看| 欧美一区二区三区婷婷月色| 7878成人国产在线观看| 欧美三级电影网| 欧美在线free| 欧美性感一区二区三区| 在线一区二区视频| 久久久久91| 色欧美日韩亚洲| 在线观看不卡视频| 欧美少妇一区二区| 6080日韩午夜伦伦午夜伦| 91精品国产综合久久久久| 717成人午夜免费福利电影| 欧美日本韩国一区二区三区视频| 欧美日本一区二区三区四区| 在线免费观看日本欧美| 在线影院国内精品| 欧美日韩色一区| 91麻豆精品91久久久久同性| 日韩精品综合一本久道在线视频| 日韩午夜激情av| 久久先锋影音av鲁色资源| 中文字幕乱码一区二区免费| 国产精品美女久久久久久久久 | 久久午夜老司机|