溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換

發(fā)布時(shí)間:2020-05-07 14:24:30 來(lái)源:億速云 閱讀:253 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

本文主要給大家簡(jiǎn)單講講mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換,相關(guān)專(zhuān)業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書(shū)籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換這篇文章可以給大家?guī)?lái)一些實(shí)際幫助。

mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換
我們看上圖,yhtest 表,第三列為c、varchar 類(lèi)型,表中4行數(shù)據(jù),當(dāng)我們使用select * from yhtest where c=0; 進(jìn)行查詢(xún)的時(shí)候,有三個(gè)warning!
mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換
今天我們就從這三個(gè)warning 說(shuō)起,后面的大部分內(nèi)容可以解釋為啥會(huì)有這三個(gè)warnings!
轉(zhuǎn)換原則:當(dāng)我們?cè)谑褂脀here條件查詢(xún)的時(shí)候,字段類(lèi)型和賦值類(lèi)型不一致時(shí),都將轉(zhuǎn)換成整型! 這樣一個(gè)描述其實(shí)是比較模糊的,下面我們具體來(lái)看。上圖中字段類(lèi)型為varchar 字符串類(lèi)型,但是查詢(xún)條件為c=0 ×××,需要將字段內(nèi)容都轉(zhuǎn)換為整型,轉(zhuǎn)換方式為:
1)純字符串內(nèi)容,則直接轉(zhuǎn)換為0  ‘a(chǎn)bc’ 將直接被轉(zhuǎn)換為0
2)含有以數(shù)字開(kāi)頭的字符串 ,則會(huì)進(jìn)行截取處理,截取至不是數(shù)字的字符串為止,比如‘4abc’ 將 轉(zhuǎn)換為4    ,‘04abc’ 被轉(zhuǎn)換為‘04’ 但是這個(gè)在匹配c=4的時(shí)候,是會(huì)被匹配到的
mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換
3)如果是純數(shù)字字符串,那么將直接轉(zhuǎn)換為對(duì)應(yīng)的×××,比如‘4’ 將直接轉(zhuǎn)換為4
4)以字符開(kāi)頭,數(shù)字結(jié)尾的,還是將轉(zhuǎn)換為0
這樣我們?cè)倏撮_(kāi)頭所報(bào)出的warnings ,頓時(shí)覺(jué)得合理了

很多sql優(yōu)化的文章中強(qiáng)調(diào):字符串一定記得在where條件中加引號(hào),原因也正是在這里,下面我們看例子
mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換
執(zhí)行 select  from  yhtest  where c=4 的結(jié)果和執(zhí)行計(jì)劃如下:
mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換
執(zhí)行select  from  yhtest  where c='4' 結(jié)果和執(zhí)行計(jì)劃如下:
mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換
通過(guò)執(zhí)行計(jì)劃我們看到,第一種where條件后面字段類(lèi)型 和賦值類(lèi)型不一致,隱式轉(zhuǎn)換,也沒(méi)有用到c列上的索引。第二種不存在隱式轉(zhuǎn)換,使用了c列的索引,二者的查詢(xún)結(jié)果也不一樣!
上述隱式轉(zhuǎn)換,大部分時(shí)候,我們需要用來(lái)避免隱式轉(zhuǎn)換帶來(lái)的不走索引,全表掃描,帶來(lái)的sql性能問(wèn)題,但是在數(shù)據(jù)少的時(shí)候,我們可以用來(lái)做一些特別操作,比如讓'abcdefg'=0?

mysql如何實(shí)現(xiàn)隱式轉(zhuǎn)換就先給大家講到這里,對(duì)于其它相關(guān)問(wèn)題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專(zhuān)業(yè)知識(shí)分享給大家的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI