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

muc*_*out 16 mysql

我正在使用带varchar列的表.我没有意识到在比较中没有考虑尾随空格(显然,两个仅在尾随空格量方面不同的值将违反唯一性属性,如果指定的话).

我需要在表中修复此问题,最好是在适当的位置.是否有推荐的路径在MySQL中修复这样的表?

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

Mar*_*ams 11

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

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

SELECT 'this' = 'this ' 返回TRUE

但是,LIKE逐个字符地比较字符串,因此尾随空格很重要.

SELECT 'this' LIKE 'this ' 返回FALSE.

二者=LIKE可以是不区分大小写,使用默认排序规则.COLLATE如果需要以区分大小写的方式比较它们,请使用该子句指定排序规则.


Joh*_*n M 2

您可以在有空格的表字段上运行空查询吗?

RTRIM(str) 
Run Code Online (Sandbox Code Playgroud)

返回删除了尾随空格字符的字符串 str。mysql> 选择 RTRIM('barbar'); -> 'barbar' 该函数是多字节安全的。