Mysql隐式类型转换原则
2017-01-19 15:26
309 查看
MySQL 的隐式类型转换原则:
- 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换
- 两个参数都是字符串,会按照字符串来比较,不做类型转换
- 两个参数都是整数,按照整数来比较,不做类型转换
- 十六进制的值和非数字做比较时,会被当做二进制串,和数字做比较时会按下面的规则处理
- 有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp
- 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
- 所有其他情况下,两个参数都会被转换为浮点数再进行比较
注意一个安全问题:假如 password 类型为字符串,查询条件为 int 0 则会匹配上。
由于 MySQL 隐式类型转换规则比较复杂,依赖 MySQL 隐式转换很容易出现各种想想不到的问题,而且 MySQL 隐式类型转换本身也是非常耗费 MySQL 服务器性能的,所以非常不推荐这样使用。
详见博文:http://www.cnblogs.com/rollenholt/p/5442825.html
相关文章推荐
- MySQL的隐式类型转换整理总结
- 由于mysql隐式类型转换导致的索引失效的问题
- MySQL隐式类型的转换陷阱和规则
- JavaScript数据类型隐式转换原则总结(干货!)
- 谈谈MySQL隐式类型转换
- 无法将类型"int"隐式转换为"string"
- 避免使用隐式类型转换
- 隐式类型转换问题!
- 要小心隐式类型转换
- C语言类型转换的原则
- MySQL的类型转换convert/cast,和SQL Server有点点差别
- C#中安全的隐式数据类型转换
- 无法将类型“string”隐式转换为“System.Data.SqlClient.SqlParameter”(错误)
- Mysql 数据类型转换
- More Effective C++ 阅读笔记(四)-- 避免使用隐式类型转换
- C++ 模板类型推导过程中的隐式类型转换
- 隐式类型转换
- 无法将类型"string"隐式转换为"bool"
- Beginning C# Objects从概念到代码——1.10 隐式类型转换和显式类型转换
- Bug 之 隐式类型转换