关于MySQL隐式转换
关于MySQL隐式转换一、如果表定义的是varchar字段,传入的是数字,则会发生隐式转换。
1、表DDL
http://note.youdao.com/yws/res/1458/5374998DA351427686BA056A8DD303FC
2、传int的sql
http://note.youdao.com/yws/res/1456/A14CC9BAA59B4C0ABB8949DED7A8ADB6
3、传字符串的sql
http://note.youdao.com/yws/res/1457/B0B53AEF13A54C0B9E94F4AE5EC2A60B
仔细看下表结构,rid的字段类型:
http://note.youdao.com/yws/res/1455/1E7CF7999D8E402DBB30E2BC7245B8BA
而用户传入的是int,这里会有一个隐式转换的问题,隐式转换会导致全表扫描。
把输入改成字符串类型,执行计划如下,这样就会很快了。
此外,还需要注意的是:
数字类型的0001等价于1
字符串的0001和1不等价
二、如果表定义的是int字段,传入的是字符串,在不超过int范围内,不会发生隐式转换,如果超出范围并且比较大小(以字符串类型比较'$')会隐式转换。
1、表DDL
http://note.youdao.com/yws/res/1454/131EE6B2544E41948566F59069471687
2、不超范围传字符串的sql
http://note.youdao.com/yws/res/1452/9B8F036987274D868EFDDE35719F63A9
3、不超范围传数字的sql
http://note.youdao.com/yws/res/1450/54C7539DF0064BA29E892237BFA0B9E0
4、超出范围传字符串的sql
http://note.youdao.com/yws/res/1448/CD00AE35D05D48BEA4B571FD71EE7832
http://note.youdao.com/yws/res/1451/F95B44D3B48C4091B8185E3772DDE1ED
5、超出范围传数字的sql
http://note.youdao.com/yws/res/1449/08737B07548C4553A0DE091E4CABF8D3
http://note.youdao.com/yws/res/1453/98B6DD40E0244FFD9A64CD1A829D5E5D
页:
[1]