Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 比较时需要考虑varchar中的尾随空格_Mysql - Fatal编程技术网

Mysql 比较时需要考虑varchar中的尾随空格

Mysql 比较时需要考虑varchar中的尾随空格,mysql,Mysql,我正在使用一个带有varchar列的表。我没有意识到在比较中不考虑尾随空格(而且,很明显,两个仅在尾随空格数量上不同的值将违反惟一性属性(如果指定) 我需要把它放在桌子上,最好放在原位。在MySQL中,有没有推荐的修复这样一个表的路径 我严格地通过我控制的程序访问数据库,因此切换到非人类可读的格式(如二进制)就可以了。但是我不知道如何做这样的事情,也不想破坏表。您能在包含空格的表字段上运行空查询吗 RTRIM(str) 返回带有尾随字符的字符串str 删除空格字符。mysql> 选择RTRI

我正在使用一个带有varchar列的表。我没有意识到在比较中不考虑尾随空格(而且,很明显,两个仅在尾随空格数量上不同的值将违反惟一性属性(如果指定)

我需要把它放在桌子上,最好放在原位。在MySQL中,有没有推荐的修复这样一个表的路径


我严格地通过我控制的程序访问数据库,因此切换到非人类可读的格式(如二进制)就可以了。但是我不知道如何做这样的事情,也不想破坏表。

您能在包含空格的表字段上运行空查询吗

RTRIM(str) 
返回带有尾随字符的字符串str 删除空格字符。mysql> 选择RTRIM(“芭芭拉”); ->“barbar”此函数是多字节安全的


我必须假设您使用的是MySQL 5.x,因为MySQL 4.x在VARCHAR列中不存储尾随空格

如您所述,在MySQL中使用标准的
=
运算符时,不考虑尾随空格:

选择“this”=“this”
返回TRUE

但是,会逐字符比较字符串,因此尾随空格很重要

像选择“this”一样选择“this”
返回FALSE


使用默认排序规则,
=
LIKE
可能不区分大小写。如果需要以区分大小写的方式进行比较,请使用该子句指定排序规则。

数据库排序规则在这方面起着重要作用。我也遇到过类似的情况,并且发现character set=utf8mb4和collation=utf8mb4\u 0900\u作为\u cs解决了这个问题


你可以阅读更多的内容,这是很古老的,但是你也可以使用binary关键字

mysql> select 'hello'='hello  ', binary 'hello'='hello  ';
+-------------------+--------------------------+
| 'hello'='hello  ' | binary 'hello'='hello  ' |
+-------------------+--------------------------+
|                 1 |                        0 |
+-------------------+--------------------------+
1 row in set (0.00 sec)
这也将使搜索区分大小写

mysql> select 'hello'='HELLO', binary 'hello'='HELLO';
+-----------------+------------------------+
| 'hello'='HELLO' | binary 'hello'='HELLO' |
+-----------------+------------------------+
|               1 |                      0 |
+-----------------+------------------------+

有趣的问题。想到的解决方法是在所有值的末尾添加一些字符,然后在从表中读取值时将其去掉。如果您的问题已经解决,请选择一个可接受的答案,或提交您自己的解决方案。使用LIKE而不是
=
打开一罐蠕虫,例如,当与来自用户输入的字符串进行比较时。