2017-02-02 14 views
0

我有不同的SQL文件集,其中有法文/西班牙文和其他語言字符。在Windows中,我們能夠看到特定的語言字符,以及何時轉移到Linux,我看到怪異的字符。WINDOWS到Linux字符集問題

我知道windows使用不同的字符集,如WINDOWS-1252,WINDOWS-1258和iso-8859-1。

如何在Linux中更改與Windows相似的字符集,以便在觸發Linux查詢時不會在數據庫中插入奇怪的字符?

在此先感謝。

+0

歡迎來到本網站!查看[tour](https://stackoverflow.com/tour)瞭解更多關於這裏主題的內容。您可能會在[DB管理員](https://dba.stackexchange.com/)網站上運氣更好。 – cxw

+3

這是Perl的標籤,所以我猜你正在使用DBI?顯示您的錯誤代碼,導致它應該像讀取輸入文件時更改編碼一樣簡單。另外,你使用的是什麼數據庫服務器? – ikegami

+0

我正在使用sqlplus以及perl代碼而不是DBI模塊,因爲它不僅僅是插入,更新並具有過程,觸發器和視圖。 – user1676886

回答

0

在Windows中,我們可以看到具體的語言文字

可以在記事本打開它++和查看文件正在使用什麼編碼,你也可以將其轉換爲UTF-8。

+3

不,您可以看到Notepad ++正在猜測編碼。要知道該文件正在使用哪種編碼,您必須向寫信的人諮詢。 –

+0

這仍然是有用的建議,因爲Notepad ++可用於更改它。除非猜測錯誤,否則大部分時間都應該起作用。但這比猜測自己好。 – simbabque

+0

我正在嘗試使用perl,sqlplus自動化FB部署。我們不希望DB團隊告訴我們他們正在使用的字符集。工作流程是WINDOWS-> SCM-> Linux-> DB – user1676886

1

如果我正確地理解了這個問題,那麼您就會在包含非ASCII字符的各種窗口編碼中生成SQL腳本。你想在Linux上執行這些腳本。

我想你會想要無損地將文件轉換爲你的linux SQL解析器可以處理的東西,可能是unicode UTF-8。這種轉換可以使用iconv(命令行實用程序,我相信也有庫)完成。

一個挑戰是你是否知道每個文件的原始編碼是什麼,因爲這不一定會被自動檢測到......如果你能讓腳本文件的作者爲腳本提供指定的編碼。

+0

我試圖在Linux中同時使用iconv和recode命令,但這兩個命令並未解決我的問題。因爲我愛德來確定源編碼。順便說一句,我正在嘗試使用perl,sqlplus自動化數據庫部署。 – user1676886

+0

正如其他人所提到的那樣,最好*知道源編碼,因爲自動檢測是不完美的。但是有些實用程序和庫試圖做到這一點:嘗試查看「chardet」,我相信有各種庫和端口。 –

0

你會想要使用Encodeutf8模塊。 通常對於SQL或MySQL,您將設置數據庫編碼爲您喜歡的工作。現在大多數人把它設置爲UTF-8來支持大範圍的字符集。

但是在這種情況下,您可以使用編碼來匹配正確的編碼,這可以工作。

use Encode qw(decode encode); 
$data = encode("utf8", decode("iso-8859-1", $data));