關於MySQL隱式轉換

關於MySQL隱式轉換

一、如果表定義的是varchar字段,傳入的是數字,則會發生隱式轉換。

  1、表DDL

5374998DA351427686BA056A8DD303FC

2、傳intsql

A14CC9BAA59B4C0ABB8949DED7A8ADB6

3、傳字符串的sql

B0B53AEF13A54C0B9E94F4AE5EC2A60B

仔細看下錶結構,rid的字段類型: 

1E7CF7999D8E402DBB30E2BC7245B8BA

而用戶傳入的是int,這裏會有一個隱式轉換的問題,隱式轉換會導致全表掃描。

把輸入改成字符串類型,執行計劃如下,這樣就會很快了。

此外,還需要注意的是:

數字類型的0001等價於1

字符串的00011不等價

 

二、如果表定義的是int字段,傳入的是字符串,在不超過int範圍內,不會發生隱式轉換,如果超出範圍並且比較大小(以字符串類型比較'$')會隱式轉換。

1、表DDL

131EE6B2544E41948566F59069471687

2、不超範圍傳字符串的sql

9B8F036987274D868EFDDE35719F63A9

3、不超範圍傳數字的sql

54C7539DF0064BA29E892237BFA0B9E0

 

4、超出範圍傳字符串的sql

CD00AE35D05D48BEA4B571FD71EE7832

F95B44D3B48C4091B8185E3772DDE1ED

5、超出範圍傳數字的sql

08737B07548C4553A0DE091E4CABF8D3

98B6DD40E0244FFD9A64CD1A829D5E5D


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章