2016-04-25 120 views
1

我有一個csv文件,其中包含一些行,我想使用LOAD DATA INFILE MySQL命令將其插入到MySQL表中。當我使用該命令並且插入準備就緒時,插入的特殊字符全部混亂。該文件正確存儲字符(我認爲是這樣,因爲當我用EditPlus這樣的編輯器打開文件時,特殊字符全部被破壞,但當用其他編輯器打開時,如EmEditor,特殊字符顯示正確),列將保存具有特殊字符的文本的字符是utf8_general_ci,它們是varchar列或text列。該表是InnoDB表,其中排序規則設置爲utf8_general_ci。我運行LOAD DATA INFILE命令,從MariaDB的命令行,使用以下參數:MySQL數據庫的特殊字符(cyrilic,chinese)

LOAD DATA INFILE '/path/to/csv/file' INTO TABLE tablename FIELDS TERMINATED BY '|' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

任何想法的問題可能是什麼,以及可能的解決方案可能是什麼?

謝謝!

編輯:我使用SET NAMES "utf8";命令,使用LOAD DATA INFILE一個,沒有成功之前也試過:|

+1

對於中文,您可能需要'utf8mb4'而不是'utf8'。某些表情符號和中文字符僅適用於utf8mb4。 (西里爾文也好。) –

+0

看起來,即使是中文字符現在工作與欺騙的解決方案。 –

+1

_Most_中文字符使用'utf8'。只有4字節的編碼失敗。 –

回答

1

MySQL需要知道該文件保存在什麼編碼(字符集)以正確讀取和解釋它。

服務器使用由所述 character_set_database系統變量指示來解釋文件中的信息 的字符集。 SET NAMEScharacter_set_client確定 的設置不會影響輸入的解釋。如果輸入文件 的內容使用與默認值不同的字符集,則通常使用子句來指定文件的字符集,這通常是 。字符集的binary規定「沒有 轉換。」

找出什麼編碼的文件實際上是保存,或者明確地將其保存在一個特定的編碼從文本編輯器(即不正確地解釋文字編輯器已經),然後將CHARACTER SET ...添加到LOAD DATA聲明中。有關詳細信息,請參閱文檔:http://dev.mysql.com/doc/refman/5.7/en/load-data.html

+0

好吧,現在嘗試使用'LOAD DATA INFILE'/ path/to/csv/file'INTO TABLE tablename CHARACTER SET UTF8 FIELDS TERMINATED BY'|'ENCLOSED BY'「 'LINES TERMINATED BY'\ r \ n';'。完成需要幾分鐘的時間(〜20),但一旦準備就緒,我會盡快回復。 –

+0

解決這個問題,謝謝:) –

1

可能您的文件不是UTF8。在你的編輯器中,當保存時,檢查你的文件的字符編碼是UTF8。編輯器正確渲染字符的事實並不意味着它被保存爲UTF8。字符編碼既可以是保存文件時的選項,也可以是菜單中某處的文件屬性(取決於編輯器)。

+0

嗯。我使用php創建了該文件,因爲我正在將PostgreSQL表中的數據傳輸到MySQL表中。我會檢查這一點,並回來的結果。 –

+0

我再次用EditPlus打開了文件,現在這些字符也正確顯示,並且它說文件的編碼是UTF8。所以我不認爲這是問題:( –