2012-06-25 122 views
4

我試圖將MySQL 3.23.58數據庫移動到運行5.5.19的不同服務器。在MySQL導出/導入中丟失特殊字符

舊的具有latin1編碼指定,並且據我所知底層數據的確是老實拉丁。我已經嘗試了很多東西,主要是:

  • 從終端輸出mysqldump和latin1編碼標誌。
  • 在vim中編輯將「TYPE = InnoDB」更改爲「ENGINE = InnoDB」以實現MySQL 5的兼容性。
  • 從終端導入到新的服務器。

瀏覽舊服務器(在續集的Mac Pro,或MySQL查詢在PC瀏覽器),特殊字符不會總是顯示正常,但他們在那裏(看着十六進制二進制)。 (在任何情況下,它都適用於PHP Web應用程序。)

瀏覽新服務器時,所有特殊字符似乎都被問號所代替。我知道如果指定了錯誤的編碼,有時候特殊字符會顯示爲問號(或 )。但是這些似乎是二進制級別的真正的直接編碼的ASCII問號。在出口/進口中,特殊字符(主要是曲線的引號和破折號)似乎已經丟失或被破壞。

任何想法爲什麼?

我知道有許多事情可能會出錯編碼,有很多不同的事情有錯。我已經閱讀了幾天(在這裏和其他地方),並嘗試設置所有正確的字符編碼,嘗試UTF-8,嘗試鑄造和轉換,嘗試過Sequel Pro的導出/導入(而不是終端)等。我很難過。

+0

如果您導出爲SQL語句,您是否看到相同的問題?從你的問題,它聽起來像導出的文件是好的(你已經在十六進制編輯器),但這是導致問題的導入。我無法明白爲什麼SQL INSERT語句會失敗,如果它是磁盤上的純文本文件並且所有字符都以UTF-8或latin1表示。試一下你遇到的一條記錄。 – Brad

+0

這是一個撇號(或右單引號)看起來像在VIM(截圖)導出的文件:http://cl.ly/1C2m0d1M2y0g1J1C3d0P - 一個<92>。那是一種vim有向圖嗎? (?Quadgraph)這裏並不匹配任何東西:http://vimdoc.sourceforge.net/htmldoc/digraph.html#digraph-table – Toph

+0

而且一個破折號顯示爲<97>。 – Toph

回答

2

好,看起來我們已經縮小了您的問題。我發現this post

如果你的文本編輯器VIM,那麼最有可能的「< 92>」是一個擴展ASCII字符的 十六進制代碼。在這種情況下,它是「右單引號 標記」的十六進制(92)或十月(222)或十二月(146)的 ;不要混淆「單引號」,這是ASCII碼十二月刪除所有非ASCII字符從您的文件可能是39

一種方式 -

perl -plne 's/[^[:ascii:]]//g' <your_file>

否則只是搜索和替換「< 92>」和「< 97>」,並帶有適當的字符。

[編輯]

我不是一個VIM用戶,但這篇文章解決了replacing the <92> smart quote characters

問題對於每個您在文件中看到價值,只是做一個字符串替換 ,像這樣:

:%s/<93>/\’/g

當然

,你不能只鍵入< 93>在那裏,所以得到它在 有您使用

CTRL-V X 93

其插入六角93到位。

在最近從excel中導出的CSV文件中,我看到了十六進制的91-97。

+0

感謝您的幫助布拉德。不幸的是,刪除所有非ASCII字符不是一個選項。搜索和替換可以工作,但我還沒有弄清楚它如何在vim中使用擴展的ASCII字符。如果我只輸入<92>等,就找不到它們。 – Toph

+0

[編輯]評論:啊,非常好,非常感謝!我也不得不設置文件編碼在vim中UTF8它保存(也許這一直都被一個問題嗎?我認爲我會照顧它),並確保集名稱「UTF8」爲MySQL,但固定關鍵在於它。看起來不錯。 – Toph