Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何比较单个空格的字符串_Mysql_Sql - Fatal编程技术网

Mysql 如何比较单个空格的字符串

Mysql 如何比较单个空格的字符串,mysql,sql,Mysql,Sql,我想检查一列是否有任何值是单个空格字符 我最初认为 WHERE my_column = ' ' 这是明智的。但不会。出于某种原因,这也将匹配具有多个空格的列: SELECT ' ' = ' ' => true 因此,我可以使用常规的express或十六进制编码来测试: WHERE HEX(my_column) = '20' WHERE my_column REGEXP '^\ $' 两者都有效。但我怀疑两者(当然是后者)都会相当低效 有更好的方法吗?a两个字

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

我最初认为

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

SELECT '    ' = ' '           => true
因此,我可以使用常规的express或十六进制编码来测试:

WHERE HEX(my_column) = '20'
WHERE my_column REGEXP '^\ $'
两者都有效。但我怀疑两者(当然是后者)都会相当低效

有更好的方法吗?

a两个字符串需要精确匹配

where my_column = ' ' and LENGTH(my_column) = 1
在正常情况下,在比较中不考虑尾随空格,但
BINARY
运算符强制它为:

二进制也会导致尾随空格变得重要

顺便说一句,受尾随空格问题影响的不仅仅是只有空格的比较:

mysql> SELECT 'abc   ' = 'abc';
+------------------+
| 'abc   ' = 'abc' |
+------------------+
|                1 |
+------------------+
……但是

mysql> SELECT BINARY 'abc   ' = 'abc';
+-------------------------+
| BINARY 'abc   ' = 'abc' |
+-------------------------+
|                       0 |
+-------------------------+
…更令人困惑的是,前导空格意义重大:

mysql> SELECT ' abc   ' = 'abc';
+-------------------+
| ' abc   ' = 'abc' |
+-------------------+
|                 0 |
+-------------------+
关于索引:
BINARY
将阻止在字符列上使用索引。但是,如果将
二进制
运算符应用于比较的字符串文本端,则建议使用索引,如中所示:

SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '
当COL_NAME='
'时选择大小写,然后选择'yes'或'no'作为表_NAME中的空格指示符结束,其中长度(COL_NAME)=1


mysql中的
LENGTH
不是
len
。使用
BINARY
是否仍然使用索引?我想知道他们为什么不忽略尾随的“G”字符?或尾随'3'或'6'或'x's。。。
SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '