2014-04-10 74 views
0

我有很多從excel或csv導入數據的腳本。 99%的人都很好。爲什麼我的導入數據在mysql中搞砸了?

我有一個特定的領域 - 關鍵字 - 這是搞砸導入。

例子:

我輸入field-- >

Accelus,GRC,智能管理,策略管理,關係 風險,培訓,審計,風險管理,合規管理,Accelus 合規經理,ACM,Accelus風險管理,ARM,策略管理器, 世界檢查,鄉村檢查,IntegraScreen,審計 經理,AutoAudit,電子學習,GRC00971

我得到什麼了field--

Accelus,GRC,智能管理,策略管理,關係 風險,培訓,審計,風險管理,合規管理,Accelus 合規經理,ACM,Accelus風險經理,ARM,策略管理器, 世界檢查,鄉村檢查,IntegraScreen,金盻ÿ盼

MySQL表是InnoDB的/ UTF8。我試圖使用varchar和文本字段,但完全相同的結果。該文件正在從數據庫爲UTF8的服務器生成(據推測)。任何建議 - 這種情況發生在相當多的行上,並且正在爲我們的報告網站上的最終用戶銷燬導出和查找腳本。

更新:我把字符轉換成谷歌,他們是日本(糾正我,如果我錯了)。所以我想,讓我們打開Excel,看看會發生什麼。那麼數據看起來很正常,但是當我在Excel中將列格式更改爲'text'時,除了#####################之外,對於不良行(只是) - 請注意,7500中只有少數幾行。這些行前後的所有數據以及「壞」行的其餘部分都很好。它只是一列。所以我想我正在處理一個編碼問題,但這些字母看起來很正常。

+0

你的'IMPORT'語句是怎麼樣的? 「審計管理器」中的「審計」之後,您的csv中是否有換行符?或者只是在您的文章中? 「搞砸」是什麼意思?錯誤的字符編碼和/或其他什麼? – citizen404

+0

@ mind-404 - 我使用navicat。這個特定的表格有7500行,並且只有5個問題。導入只是繼續下去,所以下一行很好。我也應該說,同一排上的下一個領域也不錯。 – blankip

+0

這是每行最後一列崩潰嗎?所以,我可能與最大行大小有關。你正在運行哪個MySQL版本? 'select version();' – citizen404

回答

1

在Excel的頂部

header('Content-Type: text/html; charset=UTF-8'); 

設置在PHP編纂你不能CSV文件保存爲UTF-8。它使用ANSI編碼CSV文件。

你可以做到以下幾點:

1)選擇在 「保存類型:」 「另存爲」
2)區域中,選擇 「統一 文本」。你會得到一個Unicode文件。 (UCS-2 Little Endian)
3)使用Notepad ++編碼菜單/轉換爲不帶BOM的UTF-8。

另一種方法是隱蔽的XSLX爲XLS實際CSV丁文前:

丟失的字符/截斷問題似乎只能從節約XLSX格式爲CSV格式時發生。嘗試先將xlsx文件保存到xls,然後再保存到csv。生成的csv仍然不是utf-8編碼,但可以使用文本編輯器(如記事本++)輕鬆轉換。

Link to Excel Specifications

+0

這是正確的。不知道爲什麼添加了日文字符 - 當我們的一些出版商在日本時非常混亂。所以第一個反應是編碼。然後嘗試保存爲csv不像您所記下的那樣工作。記事本+ +工作,並保存爲文本/製表符分隔在Excel中的作品。 excel規範說每個單元格最多有255個字符,這是不明確的,因爲我在單元格中顯示了1000個字符,但我想你不能傳輸它們。 – blankip

0

嘗試在文檔

+1

沒有涉及php。我得到csv或excel與正確的數據,當我做我的導入......繁榮在字符串的末尾得到不好的數據。 – blankip