`
hejianhuacn
  • 浏览: 69299 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

小心隐式类型转换

阅读更多

       数据库为了保证SQL能够正常执行,总会提供一些友好性来满足那些看起来对的SQL正常执行,比如隐式类型转换的使用,万字不如code,来看个具体碰到的问题:

   首先创建表:

create table  CONVERT_SHOW 
(
   USER_ID              bigint(8),
   NAME                  varchar(8),
   OP_TIME              timestamp default CURRENT_TIMESTAMP
);

 插入模拟数据:

insert into CONVERT_SHOW(user_id,name)values(0,'cast');

业务前台需要查询表中的数据时一般使用的查询SQL:

 

select USER_ID,NAME,OP_TIME from CONVERT_SHOW where USER_ID= ?;

 

一般处理这样的参数,都会以'参数值' 来替换"?",替换后的SQL可能是这样的:

select USER_ID,NAME,OP_TIME from CONVERT_SHOW where USER_ID= '查询参数';

 这时,隐藏的一个陷阱就可能出现:数据库为了SQL正常工作,会使用隐式类型转换使得参数变成bigint类型,如果传递的参数不是整数会出现什么样的情况?

    看看MySQL的类型转换:

select cast('查询参数' as UNSIGNED ) ;

    结果是:0

    如果恰好表里存在一条user_id为0的数据,就会被返回,接着就是让人的各种着急,连在Google上使用那些关键字上来查找原因都比较难描述^_^

     如果前端能够做到对参数进行类型校验,肯定可以避免问题出现,但大多时候都是无心挖出来的坑,那真是满头的黑线啊!!!

    

分享到:
评论
1 楼 liyueling 2014-04-08  

相关推荐

    C语言隐式类型转换规则

    C语言隐式类型转换规则。了解一下对写程序有好处,可以防止不必要的错误

    类的转换C++的内部数据类型遵循隐式类型转换规则

    类的转换,C++的内部数据类型遵循隐式类型转换规则,成员转换函数

    Mysql隐式类型转换原则

    本文将要为您介绍的是Mysql隐式类型转换原则,具体实现方法:  MySQL 的隐式类型转换原则:  - 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种...

    JavaScript隐式类型转换_.docx

    JavaScript隐式类型转换_.docx

    隐式类型转换

    c编程过程中的数据类型隐式转换,帮助初学者了解数据结构的类型,减少数据类型锁带来的编码错误

    简单介绍JavaScript数据类型之隐式类型转换

    不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换。隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等。。 typeof '11' //string typeof(11) //number '11' < 4 //false 本章节单独...

    c++隐式类型转换示例分享

    主要介绍了c++隐式类型转换的二个示例,需要的朋友可以参考下

    JS面试题大坑之隐式类型转换实例代码

    主要介绍了JS面试题大坑之隐式类型转换实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    MySQL隐式类型的转换陷阱和规则

    相信大家都知道隐式类型转换有无法命中索引的风险,在高并发、大数据量的情况下,命不中索引带来的后果非常严重。将数据库拖死,继而整个系统崩溃,对于大规模系统损失惨重。所以下面通过本文来好好学习下MySQL隐式...

    单元十:数据类型的隐式转换-数据类型的隐式转换完整版资料.pptx

    单元十:数据类型的隐式转换-数据类型的隐式转换完整版资料.pptx

    JavaScript强制类型转换和隐式类型转换操作示例

    本文实例讲述了JavaScript强制类型转换和隐式类型转换。分享给大家供大家参考,具体如下: 在JavaScript中声明变量不需指定类型, 对变量赋值也没有类型检查,同时JavaScript允许隐式类型转换。这些特征说明...

    有趣的JavaScript隐式类型转换操作实例分析

    本文实例讲述了JavaScript隐式类型转换操作。分享给大家供大家参考,具体如下: JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一...

    MySQL的隐式类型转换整理总结

    前几天在看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下。希望对大家有所帮助。 当我们对不同类型的值进行比较的时候,...

    浅析JavaScript中的隐式类型转换

    如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 。google和维基百科中没有找到“显示类型转换”,“隐式类型转换”的字眼。暂且这么称呼。 一、 运算中存在的...

    C#显式类型与隐式转换

    笔记,csdn搜可以搜到,自己的总结。

    C++中隐式类型转换学习笔记

    1 operator隐式类型转换 1.1 std::ref源码中reference_wrapper隐式类型转换 在std::ref的实现中有如下一段代码: template class reference_wrapper : public _Reference_wrapper_base<typename>::type> { _Tp*...

Global site tag (gtag.js) - Google Analytics