关于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


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