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 '