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

Pet*_*owe 7 mysql sql

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

我最初想的是

WHERE my_column = ' '
Run Code Online (Sandbox Code Playgroud)

会是明智的.但不是.这也将匹配具有多个空格的列,原因如下:

SELECT '    ' = ' '           => true
Run Code Online (Sandbox Code Playgroud)

所以我可以使用常规快速或十六进制编码来测试:

WHERE HEX(my_column) = '20'
WHERE my_column REGEXP '^\ $'
Run Code Online (Sandbox Code Playgroud)

两者都有效.但我怀疑两者(当然后者)的效率都很低.

有没有更好的办法?

Mic*_*ski 11

BINARY比较两个串的需要精确匹配

在正常情况下,比较中不会考虑尾随空格,但BINARY操作员强制它是:

BINARY也会导致尾随空格很重要.

mysql> SELECT BINARY '   ' = ' ';
+--------------------+
| BINARY '   ' = ' ' |
+--------------------+
|                  0 |
+--------------------+
Run Code Online (Sandbox Code Playgroud)

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

mysql> SELECT 'abc   ' = 'abc';
+------------------+
| 'abc   ' = 'abc' |
+------------------+
|                1 |
+------------------+
Run Code Online (Sandbox Code Playgroud)

...但...

mysql> SELECT BINARY 'abc   ' = 'abc';
+-------------------------+
| BINARY 'abc   ' = 'abc' |
+-------------------------+
|                       0 |
+-------------------------+
Run Code Online (Sandbox Code Playgroud)

......而且更令人困惑的是,领先的空白非常重要:

mysql> SELECT ' abc   ' = 'abc';
+-------------------+
| ' abc   ' = 'abc' |
+-------------------+
|                 0 |
+-------------------+
Run Code Online (Sandbox Code Playgroud)

关于索引:

BINARY将阻止在字符列上使用索引.但是,关于文档的注释表明,如果将运算符应用于比较的字符串文字侧,则将使用索引BINARY,如下所示:

SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '
Run Code Online (Sandbox Code Playgroud)