1.mysql中 int 与 varchar 类型的隐式转换:
一,
如果表定义的是varchar字段,传入的是int型数字,则会发生隐式转换
二,
表定义的是int字段,传入的是varchar数字字符串,不会发生隐式转换,如果在与数字字符串比较大小并且数字字符串还超过int定义的长度(会以字符串类型比较’$’)会隐式转换
三,隐式转换会扫描全表,造成字段的索引的阻塞。
2.在oracle中
create table tn (id number, name varchar2(1));
create index idx_tn on tn (id);
create index idx_tn2 on tn (name);
select * from tn where id=’123′;
VARCHAR2->NUMBER的隐式转换,不会对索引产生影响
。
select * from tn where name=123; 这里
Oracle会将数值类型的123转换为VARCHAR2字符类型,和name进行比较,会用用全表扫描,导致name的列索引失效
。
所以
NAME和VARCHAR2之间可以进行隐式转换,其中VARCHAR2->NUMBER不会导致索引失效,NUMBER->VARCHAR2会让索引失效,因此这种隐式转换,是需要注意避免。