2013-09-26 81 views
0

我們正在運行一個cron腳本,它從csv接收新用戶並將它們插入到我們的數據庫中。只要遇到名稱中帶有特殊字符的用戶,它就會失敗,但我不明白爲什麼,只要我能看到所有設置都應該起作用。mysql特殊字符 - 不正確的字符串值' xE1n'

這裏有一個名字它的失敗上的例子:

Siobhán 

錯誤消息:

!! Incorrect string value: '\xE1n' for column 'firstname' at row 1 

然後它試圖插入數據的var_dump有名稱爲:Siobh所以它被刪除的特殊字符

這裏是我們的數據庫中的'char%'顯示變量的輸出:

character_set_client utf8 
character_set_connection utf8 
character_set_database utf8 
character_set_filesystem binary 
character_set_results utf8 
character_set_server utf8 
character_set_system utf8 
character_sets_dir /usr/share/mysql/charsets/ 

users表中的排序規則utf8_unicode_ci

名字和姓氏列的排序規則是utf8_unicode_ci

php腳本的首部設置了:

content-type: text/html; charset=utf-8 

當我在變量傳遞到查詢之前對該變量運行mb_detect_encoding(),它返回爲UTF-8

所以我在這裏想出了爲什麼它失敗...

有沒有人有任何想法,我們要去哪裏錯了?

感謝

+0

您是否將CSV保存爲UTF-8? – DanFromGermany

+0

csv由另一個部門的腳本自動生成。無論如何檢查? –

+0

用你的文本編輯器打開。 Notepad ++符合我的需求。確保您的其他腳本也保存爲utf-8,並且您複製的所有數據都是utf-8編碼的。 – DanFromGermany

回答

0

正如我們已經發現,在評論這個問題,這裏是解決方案:

程序創建CSV文件,並創建以ANSI格式的文件。 它需要用UTF-8編寫。

這意味着數據的實際來源也需要是UTF-8,並且您的所有PHP文件也應該是UTF-8。

求助看到這個:http://www.php.net/manual/de/function.fopen.php#104325

無論你的腳本由和成CSV獲取數據,數據必須被轉換或者已經是UTF-8。