我在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)
有我的數據庫了一簇簇?
我知道的是數據被插入到utf8編碼中。但爲什麼? – Adee
當我將名稱設置爲latin1時,它的行爲與utf8相同,當我將名稱設置爲utf8時,其行爲與latin1相同。請幫助 – Adee
'$ data'從哪裏來? – Esailija