我花了几个小时来解决这个问题,但我无法解决它。
其中一列包含像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。
我该怎么做,选择等于字符串的值,但忽略这样的空间编码问题。
对不起我的英语很差。
答案 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'), ' ' );