【问题标题】:MySQL WHERE clause automatically trims trailing whitespace [duplicate]MySQL WHERE 子句自动修剪尾随空格 [重复]
【发布时间】:2013-01-05 05:03:29
【问题描述】:

可能重复:
How to string-compare for a single space

为什么在MySQL可以查询

SELECT name
  FROM groups
 WHERE name =  'WEB    '

注意到所有尾随空格。我希望这不会返回任何行,因为组 WEB 存在但 WEB 不存在尾随空格。如何强制 MySQL 准确查询而不自动修剪 WHERE 子句中的尾随空格?

【问题讨论】:

  • BINARY 比较是必要的。查看链接的问题。
  • 不做 BINARY 不使用索引吗?扼杀性能。
  • @Justin 用户文档中有一条注释“解决方案是将二进制运算符应用于常量,然后使用索引”,如name = BINARY 'WEB '跨度>
  • @Justin 快速搜索发现尾随空格不受 UNIQUE 约束的影响。您可能必须以 utf8_bin 作为其字符集来声明该列。

标签: mysql whitespace


【解决方案1】:

解决方案是使用BINARY

SELECT name
  FROM groups
 WHERE name = BINARY 'WEB    '

【讨论】:

    【解决方案2】:

    一些解决方案;

    如上所述,正确的做法是通过二进制比较。通常,这不会像您所说的那样“杀死”性能;二进制比较通常是非常快速的操作。

    SELECT name
    FROM groups
    WHERE name = BINARY 'WEB   '
    

    这会将“WEB”连接到“WEB”。

    除此之外,如果您正在使用前端解决方案,您可以寻找解决方案;例如使用 php 附加“%20”代替空格等。更优雅的解决方案是将有效的表名预加载到数组中,并在运行查询之前与它们进行比较以获得有效匹配。但是,我认为仅运行 BINARY 解决方案会大大缩短您的处理时间。

    【讨论】:

      【解决方案3】:

      您需要使用LIKE 运算符而不是'=' 符号

      SELECT name FROM groups WHERE name like 'WEB    '
      

      另一个解决方案是您也可以使用 BINARY 关键字。

      Binary Function : - 这是 MySQL 提供的逐字节比较列的功能,可用于执行区分大小写的搜索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 2010-11-26
        • 2011-05-09
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多