2014-07-25 68 views
0

我花了幾個小時來解決這個問題,但我解決不了。MySQL SELECT LIKE空間編碼問題?

其中一列包含像下面這樣的值,並且該值包含一些空格。

光學傳感器 - 光電二極管 

我想要選擇所有等於「光學傳感器 - 光電二極管」的值。但是空格可能是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字符串,但他們不能幫助,他們都返回無。

我應該怎麼做才能選擇等於字符串的值,而忽略這樣的空間編碼問題。

對不起我的英文不好。

+0

'喜歡REPLACE( '光學傳感器 - 光電二極管', '\ XA0', '')',我想你想用一個空格:'喜歡REPLACE( '光學傳感器 - 光電二極管',' \ xa0','')'(注意最後一個''''而不是'''')。 –

+0

我對我的粗心大意感到抱歉,事實上我後來使用了SQL字符串'LIKE REPLACE('光學傳感器 - 光電二極管','\ xa0','')'。 – Yejing

+0

但也返回無。 – Yejing

回答

1

其實這是正確的答案,我應該更換c2a0,不a0。在UTF-8

非BREAK空間c2a0

而且在python unicode是a0

我弄糊塗吧,謝謝大家。

SELECT * FROM `icbase_icattrvalue` 
WHERE id = 197193 and 
REPLACE(`value` , UNHEX('c2a0'), ' ') = REPLACE('光學傳感器 - 光電二極管', UNHEX('c2a0'), ' '); 
1

Alexander Gelbukh說,在評論我也認爲這是由於我們的代碼不正確的間距..

SELECT * 
FROM `icbase_icattrvalue` 
WHERE REPLACE(`value` , '\xa0', ' ') LIKE REPLACE('光學傳感器 - 光電二極管', '\xa0', ' ') 
LIMIT 0 , 30 
+0

對於我的粗心大意,我感到抱歉,其實我以後會使用SQL字符串'LIKE REPLACE('光學傳感器 - 光電二極管','\ xa0','')'。 – Yejing

+0

@Yejing如果有幫助就接受答案 –

+0

對於我可憐的英語,我很抱歉,我想我沒有明確提出我的問題。我應該說'其實我以後使用SQL字符串LIKE REPLACE('光學傳感器 - 光電二極管','\ xa0',''),但也不返回任何值。謝謝你的幫助。 – Yejing