博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql的比较运算
阅读量:2435 次
发布时间:2019-05-10

本文共 752 字,大约阅读时间需要 2 分钟。

在menzhi007的blog里看到非常有意思的东西:

在mysql手册里:

MySQL按照以下规则进行数值比较:

  • 若有一个或两个参数为 NULL,除非NULL-safe <=> 等算符,则比较运算的结果为NULL。
  • 若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。
  • 若两个参数均为整数,则按照整数进行比较。
  • 十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。
  • 假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 timestamp。这样做的目的是为了使ODBC的进行更加顺利。 注意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。
  • 在其它情况下,参数作为浮点数进行比较。  

在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)。

为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集。请参见。

以下例子说明了比较运算中将字符串转为数字的过程:

mysql> SELECT 1 > '6x';

        -> 0

mysql> SELECT 7 > '6x';

        -> 1

mysql> SELECT 0 > 'x6';

        -> 0

mysql> SELECT 0 = 'x6';

        -> 1

这个如果不注意好确实可以导致安全问题的,比如menzhi007里举的那个列子,如果字符变量查询没有引号,但是用某些函数过滤了不可以直接注射,那么可以直接提交0就可以绕过了...

最后感谢menzhi007及hi群的各大牛的讨论,尤其是ryat牛的指点:)

转载地址:http://bxqmb.baihongyu.com/

你可能感兴趣的文章
TIOBE开发语言排行榜
查看>>
分区和卷
查看>>
换行符
查看>>
O2O
查看>>
获取指定pid的session的pga/uga使用情况
查看>>
自适应软件开发(4)
查看>>
实例恢复的简要解析
查看>>
又看了一遍
查看>>
5.1 深圳
查看>>
睡个好觉
查看>>
分类统计&取第N条记录
查看>>
深圳好热
查看>>
新项目准备启动
查看>>
2005-04-30
查看>>
与时间竞赛
查看>>
项目管理基础与实践(1)
查看>>
项目管理基础与实践(3)
查看>>
5.1过得比上班还要累
查看>>
全表扫描VS通过ROWID访问表
查看>>
人不轻狂枉少年?
查看>>