易截截图软件、单文件、免安装、纯绿色、仅160KB

mysql的比较运算

在menzhi007的blog里看到非常有意思的东西:http://hi.baidu.com/menzhi007/blog/item/c2e98551a18754848c54301c.html
在mysql手册里:
http://www.phpchina.com/manual/mysql/functions.html#comparison-operators
MySQL按照以下规则进行数值比较:
若有一个或两个参数为 NULL,除非NULL-safe <=> 等算符,则比较运算的结果为NULL。
若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。
若两个参数均为整数,则按照整数进行比较。
十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。
假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 timestamp。这样做的目的是为了使ODBC的进行更加顺利。 注意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。
在其它情况下,参数作为浮点数进行比较。  
在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)。
为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集。请参见12.8节,“Cast函数和操作符”。
以下例子说明了比较运算中将字符串转为数字的过程:
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牛的指点:)


相关文档:

忘记mysql root 密码的修改方式

如果忘记mysql的密码,可以用以下的方式进行修改:
我用的mysql是5.1的server
在windows下:
打开命令行窗口,停止mysql服务:Net stop mysql
到mysql的安装路径启动mysql,在bin目录下使用mysqld.exe启动,在命令行窗口执行:mysqld --skip-grant-tables
然后另外打开一个命入令行窗口,执行mysql,此时无需输入密码 ......

PHP和MYSQL的编码问题

1 MYSQL中的字符集概念
  Mysql的字符集里有两个概念,一个是"Character set(字符集)",另一个是"Collations"。
1.1 Collations
  Collations翻成中文是"校验",在网页开发的过程中,这个词汇,只在Mysql里使用,主要作用是指导Mysql对字符的比较,比如, ASCII字符集里,Col ......

用特殊的MySQL运算符获得更多数据比较功能

用特殊的MySQL运算符获得更多数据比较功能
如果你在最近进行过SELECT或UPDATE查询,那么你很可能用到过一个或者多个MySQL的比较运算符来限制查询的输出结果。比较是大多数SELECT查询不可分割的一部分,而MySQL为这一功能提供了很多函数;根据最近一次统计,它有超过20个这样的运算符和函数,从著名的=和LIKE到更加难懂的NO ......

mysql 创建 数据库时指定编码很重要

mysql 创建 数据库时指定编码很重要,很多开发者都使用了默认编码,但是我使用的经验来看,制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。
我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来
很多mysql数据库工具(除了phpmyadmin,我偶尔用,功能强速度慢)都不支持创建时指定数据库编码, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号