我想检查列是否有任何值是单个空格字符。
我一开始以为
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/