MySQL数据库:SQL语句中不可省去的引号

有一次在代码中发现了一个BUG,在排查过程中,差点晕翻;作一个DBA也碰到这种低级错误;大为自嘲。其实这个问题在官方手册里就写得很明白;(可见官方文档的重要性)

mysql >   create   table  h1 (id  int  , col1  char ( 1 ));
Query OK, 
0  rows affected ( 0.00  sec)

mysql
>   insert   into  h1  select   1 ,’I ' ;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into h1 select 2,’F
' ;
Query OK, 
1  row affected ( 0.00  sec)
Records: 
1   Duplicates:  0   Warnings:  0

mysql
>   insert   into  h1  select   2 ,’ 0 ′;
Query OK, 
1  row affected ( 0.00  sec)
Records: 
1   Duplicates:  0   Warnings:  0

 

mysql >   select   *   from  h1 ;
+ —— + —— +
|  id    |  col1  |
+ —— + —— +
|      1   |  I     |
|      2   |  F     |
|      2   |   0      |
+ —— + —— +
3  rows  in   set  ( 0.00  sec)

mysql
>   select   *   from  h1  where  col1 = 0 ;
+ —— + —— +
|  id    |  col1  |
+ —— + —— +
|      1   |  I     |
|      2   |  F     |
|      2   |   0      |
+ —— + —— +
3  rows  in   set 2  warnings ( 0.00  sec)

mysql
>   select   *   from  h1  where  col1 = 0 ′;
+ —— + —— +
|  id    |  col1  |
+ —— + —— +
|      2   |   0      |
+ —— + —— +
1  row  in   set  ( 0.00  sec)

 

mysql >   select   *   from  h1  where  col1 = 1 ′;
Empty 
set  ( 0.00  sec)

mysql
>   select   *   from  h1  where  col1 = 1 ;
Empty 
set 2  warnings ( 0.00  sec)

  发现没有:

  col1=0 ; 所有行被选中;

  col1=’0′ ; 结果集正常

mysql >   select   *   from  h1  where  col1 = 1 ′;
Empty 
set  ( 0.00  sec)

mysql
>   select   *   from  h1  where  col1 = 1 ;
Empty 
set 2  warnings ( 0.00  sec)

  想知道为什么吗?

  看这里.

mysql >  show warnings;
+ ——— + —— + ————————————— +
|   Level     |  Code  |  Message                                |
+ ——— + —— + ————————————— +
|  Warning  |   1292   |  Truncated incorrect  DOUBLE  value: ‘I’  |
|  Warning  |   1292   |  Truncated incorrect  DOUBLE  value: ‘F’  |
+ ——— + —— + ————————————— +
2  rows  in   set  ( 0.00  sec)

  MySQL当数据类型不匹配时,尊重用户的输入,将字段的类型做了隐式转换然后来匹配,而字符向数字转,结果都是0;

转载于:https://my.oschina.net/songhongxu/blog/159088

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值