【问题标题】:MySQL query - force case-sensitive with a ORDER BY rand( )MySQL 查询 - 使用 ORDER BY rand() 强制区分大小写
【发布时间】:2012-04-15 08:24:23
【问题描述】:

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

我的声音是这样的:

"SELECT g_path FROM glyphs WHERE g_glyph = :g_glyph ORDER BY rand()"

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

我搜索了我的问题并找到了这个解决方案:

/*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;

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

"SELECT g_path FROM glyphs WHERE g_glyph = :g_glyph ORDER BY BINARY rand()"

有什么建议吗?

非常感谢您的帮助。

【问题讨论】:

  • 您是否将 g_glyph 声明为二进制?
  • 你的专栏有什么排序规则?
  • 感谢您对我的问题感兴趣。 Gumbo 的解决方案非常有效。

标签: mysql case-sensitive


【解决方案1】:

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

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

mysql> SELECT 'a' = 'A';
        -> 1
mysql> SELECT BINARY 'a' = 'A';
        -> 0
mysql> SELECT 'a' = 'a ';
        -> 1
mysql> SELECT BINARY 'a' = 'a ';
        -> 0

所以在你的情况下:

SELECT g_path FROM glyphs WHERE BINARY g_glyph = :g_glyph ORDER BY rand()

【讨论】:

  • 非常感谢秋葵!这正是我需要的!
【解决方案2】:

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

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

默认字符集和排序规则是 latin1 和 latin1_swedish_ci,因此默认情况下非二进制字符串比较不区分大小写。这意味着如果您使用 col_name LIKE 'a%' 进行搜索,您将获得所有以 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 节,“CREATE TABLE 语法”。

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

【讨论】:

  • 感谢您的回答。我的数据库规格: - 类型:InnoDB - 类间:utf8_general_ci 如果我只是将类间 utf8_general_ci 更改为 utf8_bin,我可以获得预期结果(区分大小写的结果)还是必须转换我所有的数据库数据?
  • “_ci”表示不区分大小写。您应该改用区分大小写的 (_cs)。 bin 表示二进制比较,比大小写更严格。
  • 感谢您的解释!
猜你喜欢
  • 2013-03-24
  • 2012-12-28
  • 2012-06-12
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
相关资源
最近更新 更多