2013-04-12 64 views
1

我在Windows 7上使用PHP 5.3.4,Apache 2.2.17,MySql 5.1.53上的Wamp服務器2.1。錯誤的編碼保存在MySql數據庫.. Windows 7中,Wamp服務器

的httpd.conf:AddDefaultCharset 「ISO-8859-1」

的php.ini:DEFAULT_CHARSET = 「ISO-8859-1」

我使用的PHP的mysqli類中插入數據在一個表latin1編碼和latin1編碼列,latin1_swedish_ci整理。在php文件中,我通過元標記將charset設置爲ISO-8859-1,使用accept-charset =「ISO-8859-1」屬性渲染表單。我使用mysqli :: set_charset將數據庫連接的字符集設置爲latin1,但仍然輸入的數據已損壞。根據我的理解,數據是有效的latin1字符。

的代碼:被損壞

$dbMain->set_charset('latin1'); 
$query = "INSERT INTO `table` (" . implode(',', array_keys($data)) . ") VALUES ('" . implode("','", array_values($data)) . "')"; 
$dbMain->query($query); 

的數據: 「字符A,O,U,A,ö,ü,和SS鋪PRODUKTE獻給死Elektronik公司」

當我通過latin1連接讀取數據,它會給我帶來垃圾(帶有問號的黑色菱形),而不是我插入的數據。當我通過utf8連接讀取數據時,它會顯示我正確的字符。 同樣在SqlYog(MySql客戶端)..如果我運行「SET NAMES latin1」並瀏覽表格,我會看到barbage字符。如果我運行「SET NAMES utf8」並瀏覽表格,我會看到正確的文字。這裏有什麼問題?

更新:

我跑的MySQL客戶端以下查詢:

SET NAMES latin1; 
SELECT my_column,HEX(my_column) FROM my_table; 

,得到了這樣的結果

|my_column|HEX(my_column)| 
-------------------------- 
| ß |  C39F  | (entered manually from MySql client) 
| � |  DF  | (entered from php via latin1 connection) 

有我的數據庫了一簇簇?

+0

我知道的是數據被插入到utf8編碼中。但爲什麼? – Adee

+0

當我將名稱設置爲latin1時,它的行爲與utf8相同,當我將名稱設置爲utf8時,其行爲與la​​tin1相同。請幫助 – Adee

+0

'$ data'從哪裏來? – Esailija

回答

2

有幾件事情是很重要的:

  • 什麼是你在閱讀/觀看從數據庫中的數據使用的編碼?
  • 你是如何從數據庫中查看你的數據的?通過MySQL管理員或一些PHP腳本或HTML頁面?
  • 什麼編碼在瀏覽器中設置呢?
  • 什麼編碼你保存你的PHP文件?

你有沒有想過編碼轉換?我想幫助你,因爲我花了一些時間關於latin2和utf8編碼(波蘭語),但我需要從你那裏獲得更多信息。

+0

1. latin1。 2. SqlYog(MySql客戶端)和HTML通過PHP腳本。在這兩種情況下,我都將連接名稱設置爲latin1。我將php的字符編碼設置爲ISO-8859-1,並且使用ISO-8859-1字符集呈現元標記。 3.在迴應標題中,我看到ISO-8859-1。 4. php文件保存在ANSI中,但在將PHP和html文件編碼轉換爲ISO-8859-1之後,我也嘗試了相同的方法。但結果沒有區別。 – Adee

+0

告訴我在創建表時已經設置了什麼編碼? –

+0

表以及列與latin1_sweedish_ci歸類latin1 – Adee

0

好吧!完全沒有保存這些值的問題。在這兩種情況下,都是導致問題的檢索。

在MySql客戶端的情況下,問題是當我使用utf8連接作爲客戶端的默認連接時,客戶端僅顯示存儲的正確值。可能是客戶端的UI只能使用utf8編碼。

如果是HTML響應,PHP文件的編碼是ISO-8859-1,但.html模板文件是以UTF-8編碼保存的。該網站使用傳統的解析器來解析模板,所以當它從UTF-8文件中獲取內容並進行解析時,ISO-8859-1數據就會被破壞。將.html文件的編碼更改爲ISO-8859-1解決了該問題。

謝謝大家幫助我。我真的很感激。我希望你不要生氣

+1

你爲什麼不把所有的東西都改成UTF-8? –

+0

那麼是因爲數據庫可能包含數百萬個記錄集羣在許多數據庫服務器上。更多的停機時間,更多的風險等等 – Adee