2010-01-26 69 views
2

我想導入一個.csv文件到表中。我已經想通了如何使用下面的查詢得到插入的數據:使用加載數據INFILE與阿拉伯數據

LOAD DATA INFILE 'examplesofdata.csv' INTO TABLE coins FIELDS TERMINATED BY ',' 
ENCLOSED BY '' ESCAPED BY '\\' IGNORE 1 LINES; 

但是對於我的幾個字段我有被輸入爲一系列的阿拉伯文內容?我認爲這是因爲我沒有正確整理數據庫,或者我沒有完全理解LOAD DATA INFILE查詢。任何建議將不勝感激。

SHOW CREATE TABLE coins;輸出是:

CREATE TABLE `coins` (
    `cat_num` int(11) NOT NULL, 
    `reg_num` int(11) NOT NULL, 
    `period` varchar(255) NOT NULL, 
    `arb_period` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `ruler` varchar(255) NOT NULL, 
    `arb_ruler` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `mint` varchar(255) NOT NULL, 
    `arb_mint` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `date` varchar(255) NOT NULL, 
    `weight` float NOT NULL, 
    `diameter` float NOT NULL, 
    `khedieval_num` varchar(255) NOT NULL, 
    `ref` text NOT NULL, 
PRIMARY KEY (`cat_num`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 
+0

發佈SHOW CREATE TALBE硬幣;並沒有顯示樣本數據。 – Yada 2010-01-26 02:38:14

回答

1

所以我最終得到了一個老教練對我的數據庫類的答案。他告訴我,這個問題實際上是當前版本MySQL的一個報告錯誤,當時唯一已知的解決方案是通過PHP或其他腳本語言手動導入數據。

此問題的錯誤是:http://bugs.mysql.com/bug.php?id=10195

它並沒有幫助我太多,因爲我只是工作的一個原型,並設法在平均時間解決,但希望它能夠更使用你。

+0

該錯誤適用於版本4.1,它在'LOAD DATA'上沒有'CHARACTER SET'子句。但該錯誤報告提供了一種解決方法。希望沒有人閱讀這個線程仍然使用4.1;所以這不應該被視爲「答案」。 – 2016-06-18 08:03:17

0

如何設置CHARACTER SET utf8_unicode或您的語言環境?

+0

當我嘗試: LOAD DATA INFILE'coinsArab.csv'CHARACTER SET utf8_unicode INTO TABLE coins''''''''''ESCAPED BY'\''IGNORE 1 LINES; 我得到一個錯誤,說我的sql中有一個錯誤,在CHARACTER SET附近... 它在錯誤的地方嗎? – Krustal 2010-01-26 03:07:12

+0

imm,你可以試試'utf8_unicode_ci'嗎?我基本上提到了utf8編碼。正確的語法,你可以在這裏罰款 - http://dev.mysql.com/doc/refman/5.1/en/load-data.html – YOU 2010-01-26 03:12:48

+0

我想出了我的語法錯誤,感覺很蠢,但它仍然導致??? ?? ???而不是文件中的內容。當我從Excel中複製文本並手動粘貼時,它工作得很好,我不知道這是否有幫助。 – Krustal 2010-01-26 06:10:20

2

這仍然是一個MySQL的錯誤。但是,我發現數據庫的默認字符集是罪魁禍首。有兩種可能的解決方法:

  1. 如果將數據庫的默認字符集更改爲LATIN1,則它將起作用。你可以保留你的表/列UTF-8。
  2. 奇怪的是,如果您使用「CHARACTER SET latin1」,它將同時適用於UTF-8和Latin1表格/列。使用這種方法,你可以保持你的數據庫/表/字段字符集UTF-8。
0

我還發現您的character_set_client字符必須是UTF-8,以及:

mysql> show session variables like 'char%'; 
+--------------------------+----------------------------------------+ 
| Variable_name   | Value         | 
+--------------------------+----------------------------------------+ 
| character_set_client  | latin1       
... 

上如何去改變,對於誰服務器或僅僅只有會話閱讀MySQL的文檔。

4

LOAD DATA LOCAL INFILE'filename'INTO TABLE tablename CHARACTER SET utf8'\ t'行終止的列'\ n';

CHARACTER SET utf8會訣竅。

0

我也有這個問題,但不是系列?,我得到截斷的數據。

像「aeióu」被截斷在「aei」。

檢查我想出的解決方案here,您需要將CSV字符集與LOAD DATA INFILE字符集匹配。

乾杯

0

添加CHARACTER SET utf8LOAD DATA語句是最接近的答案。但是,另外兩個問題已經提出......

當嘗試使用UTF8/utf8mb4,如果你看到問號(正規的,而不是黑色鑽石),

  • 的字節存儲沒有編碼爲UTF-8。解決這個問題。
  • 數據庫中的列是CHARACTER SET utf8(或utf8mb4)。解決這個問題。
  • 另外,請檢查讀取期間的連接是否爲utf8。

當嘗試使用UTF8/utf8mb4,如果你看到截斷文本,

  • 的字節存儲沒有編碼爲UTF-8。解決這個問題。
  • 另外,請檢查讀取期間的連接是否爲utf8。