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