首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询强制区分大小写,使用ORDER BY rand( )

MySQL查询强制区分大小写,使用ORDER BY rand( )
EN

Stack Overflow用户
提问于 2012-04-15 16:24:23
回答 2查看 3.3K关注 0票数 3

是否可以强制查询区分大小写?

我的声音是这样的:

代码语言:javascript
复制
"SELECT g_path FROM glyphs WHERE g_glyph = :g_glyph ORDER BY rand()"

如果g_glyph = r,则结果可以是R或r,这不是我所期望的。我正在寻找区分大小写的返回值。

我在谷歌上搜索了我的问题,并找到了这个解决方案:

代码语言:javascript
复制
/*Case-sensitive sort in descending order.
In this query, ProductName is sorted in 
case-sensitive descending order.
*/
SELECT ProductID, ProductName, UnitsInStock
FROM products
ORDER BY BINARY ProductName DESC;

但是下面这行根本不起作用:

代码语言:javascript
复制
"SELECT g_path FROM glyphs WHERE g_glyph = :g_glyph ORDER BY BINARY rand()"

有什么建议吗?

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-15 16:42:39

字符的顺序和相等由collation定义。在大多数情况下,使用不区分大小写的排序规则。

如果需要对特定数据使用严格的区分大小写的比较,请使用BINARY operator

代码语言:javascript
复制
mysql> SELECT 'a' = 'A';
        -> 1
mysql> SELECT BINARY 'a' = 'A';
        -> 0
mysql> SELECT 'a' = 'a ';
        -> 1
mysql> SELECT BINARY 'a' = 'a ';
        -> 0

所以在你的例子中:

代码语言:javascript
复制
SELECT g_path FROM glyphs WHERE BINARY g_glyph = :g_glyph ORDER BY rand()
票数 5
EN

Stack Overflow用户

发布于 2012-04-15 16:28:17

手册页Case Sensitivity in String Searches中对此进行了介绍。

您需要指定区分大小写或二进制排序规则。

缺省字符集和排序规则为latin1和latin1_swedish_ci,因此缺省情况下非二进制字符串比较不区分大小写。这意味着,如果您使用类似' a %‘的col_name进行搜索,则会得到所有以A或a开头的列值。要使此搜索区分大小写,请确保其中一个操作数具有区分大小写或二进制排序规则。例如,如果比较的列和字符串都具有latin1字符集,则可以使用COLLATE运算符来使操作数具有latin1_general_cs或latin1_bin排序规则:

col_name COLLATE latin1_general_cs LIKE 'a%‘col_name LIKE 'a%’COLLATE latin1_general_cs col_name COLLATE latin1_bin LIKE 'a%‘col_name LIKE 'a%’COLLATE latin1_bin

如果希望始终以区分大小写的方式处理列,请使用区分大小写的排序规则或二进制排序规则声明它。请参阅第13.1.14节“创建表语法”。

排序规则名称中的_cs表示“区分大小写”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10160556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档