2010-04-13 61 views
1

我正在做以下。如何保持字符編碼與數據庫查詢

1)我導出數據庫並將其保存到名爲dump.sql的文件中。 2)然後通過PHP ftp將文件傳輸到不同的服務器。 3)成功傳輸文件後,管理員可以選擇在新主機上運行「dbtransfer」腳本。 4)該腳本打開腳本並逐行運行查詢。

這很好 - 但是外語編碼有問題。我們正在使用UTF-8。

第1步:這工作正常,文件是以UTF-8格式。 第3步:當我使用mb_check_encoding()測試dump.sql文件的內容時。該字符串以UTF-8形式返回。 第4步:這將創建具有utf8_general_ci編碼的表。這些信息被轉存。

當我在傳輸後查看錶格時,我收到了這樣的記錄:'ç,LJ,ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà ,AY,AZ」。我不明白UTF-8字符串在進入數據庫時​​如何失去其編碼。我錯過了一步嗎?我是否需要運行某種函數來確保字符串被解析爲UTF-8?

一旦系統安裝,我可以保存外語查詢。這只是轉移,搞亂了。

任何想法?

回答

1

它不清楚你如何做所有這些步驟,但讓我們試試看。

首先,確保與字符集相關的所有數據庫連接設置都設置爲utf-8。在數據庫方面有一些,在客戶端有一些。

其次,插入任何數據之前,請執行下列操作查詢:

SET NAMES 'utf8'; 
1

最有可能的是,您沒有告訴MySQL您正在使用UTF-8進行通信 - 連接的字符集是錯誤的。爲此,使用mysql_set_charset函數。

另請注意,utf8_general_ci不是一種編碼 - 它是一種排序規則。換句話說,它僅告訴MySQL在比較值時(包括何時進行排序)如何處理該列。

2

之後我連接到一個數據庫中的PHP我總是執行連接對象下面的查詢,以確保連接是使用UTF-8 :

$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\''); 

另一種選擇是目標表不是UTF-8。

相關問題