我是学习SQL的新手。
我对某事感到怀疑。
今天我查看了一些查询示例,并在WHERE条件中找到了一些字符串比较。
使用大于(>)和小于(<)符号进行比较,这是比较SQL中字符串的可能方法吗?它是如何行动的?一个字符串少于另一个以字典顺序出现?例如,球比水还少?这个比较区分大小写?例如BALL<水,大写字符确实会影响这些比较吗?
我用谷歌搜索了好几个小时,但我找不到任何能让我怀疑这些疑问的事情。
答案 0 :(得分:25)
比较运算符(包括 <
和 >
)“使用”字符串值和数字。
对于MySQL
默认情况下,字符串比较不区分大小写并使用当前字符集。默认值为
latin1
(西欧语言为cp1252),也适用于英语。
当比较的字符串的字符集整理区分大小写时,字符串比较将区分大小写,即字符集的名称以_cs
而不是_ci
结尾。重复MySQL参考手册中提供的所有信息毫无意义。
MySQL比较运算符参考:
http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html
有关MySQL字符集/排序规则的更多信息:
http://dev.mysql.com/doc/refman/5.5/en/charset.html
回答您提出的具体问题:
问:这是比较SQL中字符串的可行方法吗?
答:是的,在MySQL和SQL Server中都是
问:,它是如何行动的?
A:比较运算符返回一个布尔值,TRUE,FALSE或NULL。
问:字典顺序之前的字符串少于另一个字符串?例如,球比水还少?
A:是的,因为'b'在characteset排序规则中位于'w'之前,表达式
'ball' < 'water'
将返回TRUE。 (这取决于 characterset 和整理。
问:,此比较区分大小写?
A:特定比较是否区分大小写取决于数据库服务器;默认情况下,SQL Server和MySQL都不区分大小写。
在MySQL中,可以通过指定区分大小写的字符集校对来进行字符串比较(字符集名称将以_cs而不是_ci结尾)
问:例如BALL&lt;水,大写字符确实会影响这些比较吗?
答:默认情况下,在SQL Server和MySQL中都有表达式
'BALL' < 'water'
将返回TRUE。
答案 1 :(得分:9)
在Microsoft SQL Server中,归类确定用于比较和排序字符数据的字典规则:
SQL Server还包括二进制排序规则,其中比较和排序由二进制代码点而不是字典规则完成。一旦可以根据所需的灵敏度行为从许多校对中进行选择。在SQL安装期间为基于拉丁语的语言环境选择的默认排序规则不区分大小写并且区分重音。
在实例(安装期间),数据库和列级别指定了排序规则。实例排序规则确定实例级对象(如登录和数据库名称)以及变量标识符,GOTO标签和临时表的排序规则。数据库排序规则(默认情况下与实例排序规则相同)确定数据库标识符(如表名和列名)以及文字表达式的排序规则。列排序规则(默认情况下与数据库排序规则相同)确定该列的排序规则。
当然可以使用&#39;&lt;&#;;&#39;&gt;&#39;,&#39;&lt;&gt;&#39;,LIKE,BETWEEN比较字符串,等
答案 2 :(得分:0)
如果您使用基于 Mybatis 或 XML 的技术来执行 SQL 查询,则必须使用 <![CDATA[your_symbol-here]]>
来避免该问题。
'ball' <![CDATA[<]]> 'water'