一個(gè)小問(wèn)題對(duì)mysql隱式參數(shù)轉(zhuǎn)換的思考.md

遇到的問(wèn)題

最近一位以前的老同學(xué)找到我,跟我說(shuō)他們線上有出現(xiàn)了兩個(gè)由sql語(yǔ)句引起的事故,并且都沒(méi)找到原因。其中一個(gè)事故簡(jiǎn)單描述如下。

一個(gè)簡(jiǎn)單的mysql blog表

CREATE TABLE `blog` (
  `id` int(11) DEFAULT NULL,
  `title` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

其中一行數(shù)據(jù)為

INSERT INTO `blog` VALUES ('1', '32019051669436435');

查詢語(yǔ)句:

select * from blog where title = 32019051669436436 

結(jié)果查出了title為32019051669436435的數(shù)據(jù):


image.png

原因

這個(gè)原理其實(shí)很簡(jiǎn)單,其實(shí)就是發(fā)生了隱式參數(shù)轉(zhuǎn)換,title為varchar類型,而查詢語(yǔ)句中使用的是數(shù)值類型,因?yàn)閙ysql innodb varchar與數(shù)值類型的比較會(huì)轉(zhuǎn)換成double類型去比較。而double類型是有精度限制的。導(dǎo)致這個(gè)問(wèn)題的發(fā)生。

思考

這類問(wèn)題該怎么防止呢?

其實(shí)很難讓每個(gè)人程序員都知道m(xù)ysql底層的隱式參數(shù)轉(zhuǎn)換的每個(gè)細(xì)節(jié)。

我們應(yīng)該謹(jǐn)記會(huì)發(fā)生隱式參數(shù)轉(zhuǎn)換的情況,并且寫sql時(shí),要注意字段比較不能發(fā)生隱式參數(shù)轉(zhuǎn)換,就不會(huì)發(fā)生這類問(wèn)題。

隱式參數(shù)轉(zhuǎn)換的情況:

  1. 字符集不一樣:比如utf-8余utf-mb4不一樣,比較時(shí)會(huì)發(fā)生轉(zhuǎn)換,可能會(huì)使索引失效
  2. 數(shù)據(jù)類型不一樣
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫(kù)? 數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫(kù)具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問(wèn),管理...
    chen_000閱讀 4,144評(píng)論 0 19
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 6,248評(píng)論 0 4
  • 一、數(shù)據(jù)庫(kù)簡(jiǎn)介 1.數(shù)據(jù)庫(kù)系統(tǒng) 1.1數(shù)據(jù)庫(kù) DataBase【DB】,指的是長(zhǎng)期保存到計(jì)算機(jī)上的數(shù)據(jù),按照一定順...
    鄭元吉閱讀 684評(píng)論 0 6
  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,140評(píng)論 0 44
  • MySQL技術(shù)內(nèi)幕:SQL編程 姜承堯 第1章 SQL編程 >> B是由MySQL創(chuàng)始人之一Monty分支的一個(gè)版...
    沉默劍士閱讀 2,638評(píng)論 0 3

友情鏈接更多精彩內(nèi)容