2016-05-29 19 views
0

SELECT * FROM mytablename WHERE sku = 'AZ-EFCQ-5' LIMIT 0,30選擇查詢在MySQL刪除這些字符

在MySQL表(描述字段)有一些奇怪的字符在在200,000條記錄中,所有這些字符都有近400條記錄。

例子:該字段的一個數據庫記錄顯示如下,當我運行查詢

Select * from mytablename where sku='az123' 

Replacement for TOY TRAIN 746 N&W J Replacement Light Bulb 

但是當我運行在PHP中相同的查詢和打印,它顯示

Replacement For TOY TRAIN 746 N&W JÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Replacement Light Bulb 

我嘗試使用以下溶液在

How can I find non-ASCII characters in MySQL?

這是不行的,不顯示在MySQL任何奇怪的字符,請查看下 enter image description here

+0

請問您可以從mytablename中選擇ascii(substring(description,36,1)),length(描述),其中sku ='az123''併發布結果? – EagleRainbow

+0

@EagleRainbow顯示行0 - 0(總計1次,查詢花費0.0005秒),不返回任何內容 – user580950

+0

這很奇怪,你認爲在聊天室中討論這個問題在https://chat.stackoverflow.com/房間/ 113259 /選擇查詢-地移除這些字符,在MySQL的? – EagleRainbow

回答

1

在聊天中進一步分析MySQL的截圖表明,真的有東西壞了關於MySQL數據庫之間的連接處理的字符集和PHP程序的運行,我們想出了下面的「解決方案」:

SELECT replace(description, char(160), ' ') as description 
FROM dumpdata WHERE AZ_Code = 'AZ-EFK9-6' 

隱藏字符實際上這在某種程度上得到了由導入過程中引入 秒。由於它們沒有任何信息,但只是令人不安,可以在讀取列時將它們替換掉(參見上面的SQL語句)。這根本原因並不是真正的解決方案 - 它更像是一種解決方法。但是,爲了給定的目的,它被認爲是足夠的。

注意可能存在類似問題的其他讀者:數據庫連接由面向對象風格的mysqli驅動。我們試圖

$conn->set_charset('utf8') 

並確認通過conn->get_charset(),這也是成功的。但是,有線字符的問題仍然出現。此外,我們也嘗試了明確投與

SELECT cast(description as char character set utf8) 
FROM dumpdata WHERE `AZ_Code` = 'AZ-EFK9-6' 

但也沒有觸發適當的字符集轉換。