MySQL SELECT LIKE空间编码问题?

时间:2014-07-25 05:15:22

标签: mysql sql

我花了几个小时来解决这个问题,但我无法解决它。

其中一列包含像bellow这样的值,值包含一些空格。

光学传感器 - 光电二极管

我希望选择所有的值等于"光学传感器 - 光电二极管"。但是空格可能是ASCII编码(' \ x0a')或utf8编码(' \ xa0'),所以当我执行SQL字符串LIKE时,将返回None。

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字符串,但它们无法帮助,它们都返回None。

我该怎么做,选择等于字符串的值,但忽略这样的空间编码问题。

对不起我的英语很差。

2 个答案:

答案 0 :(得分:1)

正如Alexander Gelbukh在评论中说的那样我也认为这是由于你的代码中的空格不正确..

SELECT *
FROM `icbase_icattrvalue`
WHERE REPLACE( `value` , '\xa0', ' ' ) LIKE REPLACE( '光学传感器 - 光电二极管', '\xa0', ' ' )
LIMIT 0 , 30 

答案 1 :(得分:1)

实际上这是正确答案,我应该替换c2a0,而不是a0

utf-8中的非破洞空间为c2a0

在python中,unicode是a0

我对此感到困惑,谢谢大家。

SELECT * FROM `icbase_icattrvalue` 
WHERE id = 197193 and 
REPLACE( `value` , UNHEX('c2a0'), ' ' ) = REPLACE( '光学传感器 - 光电二极管', UNHEX('c2a0'),  ' ' );