本帖最後由 susoft2008 於 2013-07-22 18:05:28 編輯
資料庫亂碼 資料庫 PHP 亂碼
PHP增加、修改、查詢都不亂碼,1,
MySQL資料庫後端顯示亂碼,2,
什麼原因呢?
圖1:
圖2:
回複討論(解決方案)
是用什麼軟體查看到亂碼的
大神們,求解啊
是用什麼軟體查看到亂碼的
Toad For MySQL
PS:到處來cvs檔案也是亂碼的,中文啊。。。。
你的資料庫欄位的串連校對是預設的 latin1 的
你存入的資料是 utf-8 的
你沒有對 mysql 聲明需要的字元集,所以 mysql 依然 latin1 取出資料。對於你來說就是 utf-8 了
但是 mysql 管理工具是要聲明所需字元集的,於是被當做 latin1 的 utf8 轉換成 utf8 時就出現了亂碼現象
PHP增加、修改、查詢都不亂碼,1,
MySQL資料庫後端顯示亂碼,2,
什麼原因呢?
圖1:
圖2:
PS:
頁面編碼使用UTF-8
資料庫表編碼使用UTF-8
你的資料庫欄位的串連校對是預設的 latin1 的
你存入的資料是 utf-8 的
你沒有對 mysql 聲明需要的字元集,所以 mysql 依然 latin1 取出資料。對於你來說就是 utf-8 了
但是 mysql 管理工具是要聲明所需字元集的,於是被當做 latin1 的 utf8 轉換成 utf8 時就出現了亂碼現象
校對碼是:utf8_general_ci
這就對了,如果是 latin1 的應該是插不進去 utf-8 資料的。剛才我回複時還在想,你是怎麼把資料插進去的
但是這並不影響我給出的解釋,只是環節有所提前而已
mysql 預設的字元集是 latin1,一般也很少有人在安裝 mysql 時改變預設字元集(多數人都不知道在哪裡修改)的
所以只要使用了非預設字元集操作 mysql 都必須在操作前執行 set names 字元集代碼
對於 utf-8 就是 set names utf8
把以下代碼用 utf-8 編碼儲存,然後運行一下
或把以下代碼用 gbk 編碼儲存,然後運行一下
你都會看到這樣的結果
保證3點一致就不會亂碼了:
1、資料庫和資料表編碼
2、頁面內部編碼
3、檔案的編碼
這就對了,如果是 latin1 的應該是插不進去 utf-8 資料的。剛才我回複時還在想,你是怎麼把資料插進去的
但是這並不影響我給出的解釋,只是環節有所提前而已
mysql 預設的字元集是 latin1,一般也很少有人在安裝 mysql 時改變預設字元集(多數人都不知道在哪裡修改)的
所以只要使用了非預設字元集操作 mysql 都必須在操作前執行 set names 字元集代碼
對於 utf-8 就是 set names utf8
把以下代碼用 utf-8 編碼儲存,然後運行一下
或把以下代碼用 gbk 編碼儲存,然後運行一下
你都會看到這樣的結果
有點理解不了,還是不知道問題出在哪了?資料庫編碼應該是UTP8, :“show variables like 'character_set_database';”---》返回UTF8@~~~~~~~~~~~ 關鍵是 character_set_server 的值
出了亂碼就去找編碼吧
關鍵是 character_set_server 的值
應用時發布在購買的虛擬機器主機上的,如何查看 character_set_server的值啊?
關鍵是 character_set_server 的值
多謝指點
show variables like 'character_set_server'
show variables like 'character_set_server'
結果是UTF-8
有點不合情理了,最後一招
select BINARY supplier_ from tbl_name where id_=17
echo base64_encode('取出的資料');
貼出結果
有點不合情理了,最後一招
select BINARY supplier_ from tbl_name where id_=17
echo base64_encode('取出的資料');
貼出結果
結果如(該結果為資料庫用戶端的結果,PHP頁面資料顯示正常):
PS:本帖主題內容中的2張圖 --》圖1 為PHP頁面,顯示正常;圖2 為資料庫用戶端,顯示亂碼,到處cvs也是亂碼
你給貼圖有什麼用?
我要你用程式取出那個亂碼的內容,並貼出其 base64 編碼的值
這樣才好幫你分析
再說你貼出亂碼的同時也應該貼出不亂時的內容
你給貼圖有什麼用?
我要你用程式取出那個亂碼的內容,並貼出其 base64 編碼的值
這樣才好幫你分析
理解了,如,謝謝老大
再說你貼出亂碼的同時也應該貼出不亂時的內容
不亂碼內容:
使用BINARY 後的亂碼內容:
我要你像這樣的結果
echo base64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb
$t 是按 BINARY(二進位)方式讀出的亂碼欄位的內容
按圖形對比(#7 的方法)你那個仍然是被當做 latin1 處理的 utf-8
這些資料是你在修改字元集之前插入的吧?
我要你像這樣的結果
echo base64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb
$t 是按 BINARY(二進位)方式讀出的亂碼欄位的內容
按圖形對比(#7 的方法)你那個仍然是被當做 latin1 處理的 utf-8
這些資料是你在修改字元集之前插入的吧?
不是的哦。。 字元集沒有改過,供應商說不能改,應該是插入前沒有設定資料庫編碼為UTF8.
+QQ:252613934
留下QQ討論一下
我要你像這樣的結果
echo base64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb
$t 是按 BINARY(二進位)方式讀出的亂碼欄位的內容
按圖形對比(#7 的方法)你那個仍然是被當做 latin1 處理的 utf-8
這些資料是你在修改字元集之前插入的吧?
3Q