mysql - 如何对单个空格进行字符串比较

标签 mysql sql

我想检查列是否有任何值是单个空格字符。

我一开始以为

WHERE my_column = ' '

会很明智。但不是。这也将匹配出于某种原因具有多个空格的列:

SELECT '    ' = ' '           => true

所以我可以使用正则表达式或十六进制编码来测试:

WHERE HEX(my_column) = '20'
WHERE my_column REGEXP '^\ $'

两者都有效。但我怀疑两者(当然是后者)的效率都非常低。

有没有更好的办法?

最佳答案

A BINARY comparison精确匹配需要两个字符串中的一个

在正常情况下,比较中不考虑尾随空格,但是 BINARY 运算符强制它是:

BINARY also causes trailing spaces to be significant.

mysql> SELECT BINARY '   ' = ' ';
+--------------------+
| BINARY '   ' = ' ' |
+--------------------+
|                  0 |
+--------------------+

顺便说一下,受尾随空白问题影响的不仅仅是空白比较:

mysql> SELECT 'abc   ' = 'abc';
+------------------+
| 'abc   ' = 'abc' |
+------------------+
|                1 |
+------------------+

...但是...

mysql> SELECT BINARY 'abc   ' = 'abc';
+-------------------------+
| BINARY 'abc   ' = 'abc' |
+-------------------------+
|                       0 |
+-------------------------+

...更令人困惑的是,前导空格 很重要:

mysql> SELECT ' abc   ' = 'abc';
+-------------------+
| ' abc   ' = 'abc' |
+-------------------+
|                 0 |
+-------------------+

关于索引:

BINARY 将阻止在字符列上使用索引。然而,a note on the docs建议如果 BINARY 运算符应用于比较的字符串文字端,则将使用索引 ,如下所示:

SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '

关于mysql - 如何对单个空格进行字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007050/

相关文章:

c# - 无效的对象名称 SQL 选择

sql - 在 Postgres 中更改列类型会导致 pg_attrdef 警告

mysql - MySQL中如何防止事务复制?

mysql - 此查询需要哪种类型的联接?

mysql - SQL数据库查询: Count(Distinct)

MySQL 太慢了,从连接查询中获取 30 条记录需要 1 小时 48 分钟

sql - 如何插入一条记录并返回主键来更新另一个表中的外键?

sql - SSIS 错误 : Unable to retrieve destination column descriptions from the parameters of the SQL command

mysql - 具有 3 种形式的内连接

mysql - 正则表达式在 MySQL 查询中的每个表之前插入一个字符串