我花了好几个小时来解决这个问题,但我解决不了。
其中一个列包含类似于下面的值,该值包含一些空格。
光学传感器 - 光电二极管我希望选择与“光学传感器-光电二极管”相等的所有值。但是空格可能是ASCII编码(‘\x0a’),或者是utf8编码(‘\xA0’),所以当我像这样执行string时,将不会返回任何内容。
SELECT *
FROM `icbase_icattrvalue`
WHERE `value` LIKE '光学传感器 - 光电二极管'我尝试过这样的SQL:
SELECT *
FROM `icbase_icattrvalue`
WHERE REPLACE( `value` , '\xa0', ' ' ) LIKE REPLACE( '光学传感器 - 光电二极管', '\xa0', ' ' )
LIMIT 0 , 30 或
SELECT *
FROM `icbase_icattrvalue`
WHERE REPLACE(`value`, CONVERT(char(160) USING utf8), ' ')
LIKE REPLACE('光学传感器 - 电二极管', CONVERT(char(160) USING utf8), ' ')
LIMIT 0 , 30或者一些类似的SQL字符串,但是它们无能为力,它们都不返回。
我应该怎么做,来选择等于字符串的值,但忽略这样的空格编码问题。
我为我糟糕的英语感到抱歉。
发布于 2014-07-25 07:04:31
实际上,这是正确的答案,我应该替换c2a0,而不是a0。
utf-8中的非中断空间是c2a0。
在python中是a0。
我很困惑,谢谢大家。
SELECT * FROM `icbase_icattrvalue`
WHERE id = 197193 and
REPLACE( `value` , UNHEX('c2a0'), ' ' ) = REPLACE( '光学传感器 - 光电二极管', UNHEX('c2a0'), ' ' );发布于 2014-07-25 05:23:11
正如Alexander Gelbukh在评论中所说的那样,我也认为这是因为您的代码中的间距不正确。
SELECT *
FROM `icbase_icattrvalue`
WHERE REPLACE( `value` , '\xa0', ' ' ) LIKE REPLACE( '光学传感器 - 光电二极管', '\xa0', ' ' )
LIMIT 0 , 30 https://stackoverflow.com/questions/24948512
复制相似问题