2014-02-05 27 views
0

我在Debían中引導後應用了一個MySQL源(插入)。從腳本和源文件插入到表格時出現錯誤編碼

該文件是UTF8,並在bash腳本我啓動MySQL服務,並與命令source path/to/file.sql一個EOF(定界符)到UTF8 table(顯示創建表的說)

但是,當我連接到服務器檢查數據,它顯示波浪字符作爲怪異的字符。所以我把set names "latin1",它顯示正確。

但是,如果我跳過腳本並手動連接,然後源SQL,它插入字符確定。

所以問題在於腳本連接,但是如果我在腳本中執行相同的命令但是手動執行,它與我的插入有什麼不同。

任何幫助將不勝感激。

回答

0

事實證明,用戶在啓動後插入不是交互式的,它沒有LANG變量集,因此回落到默認latin1

一種解決方案是在所有sql文件的頂部設置SET NAMES 'utf8'

另一種是在系統中設置LANG變量。

這是從手動:

的MySQL客戶端程序的MySQL,中mysqladmin,mysqlcheck的,的mysqlimport, 和mysqlshow確定默認字符集使用如下:

在沒有其他信息,程序使用編譯後的默認字符集,通常是latin1。

的程序可以自動檢測的字符集使用基於操作系統設置,如LANG的值或LC_ALL 語言環境變量在Unix系統或代碼頁在Windows系統中設置 。對於操作系統可用的語言環境爲 的系統,客戶端使用它來設置缺省字符集,而不是使用默認編譯的缺省字符集 。例如,將LANG設置爲 ru_RU.KOI8-R會導致使用koi8r字符集。因此,用戶 可以在其環境中配置語言環境以供MySQL客戶端使用。

如果沒有完全匹配,OS字符集將映射到最接近的MySQL字符集。如果客戶端不支持 匹配的字符集,它將使用編譯的默認值。例如, ucs2不支持作爲連接字符集。

相關問題