資料庫編碼問題,搜尋中文內容獲取不到內容

2021-07-10 12:21:08 字數 2056 閱讀 1885

問題說明:

搜尋英文內容可以; 在伺服器上搜尋中文內容也正常,就是書寫原生連線資料庫操作獲取中文內容不行。

摘抄:

為了讓你的網頁能在更多的伺服器上正常地顯示,還是加上「set names utf8」吧

2007-05-28 09:18

repinted:

為了讓你的網頁能在更多的伺服器上正常地顯示,還是加上「set names utf8」吧

(可以根據你的喜歡選擇相應的編碼,如gb2312)

,即使你現在沒有加上這句也能正常訪問。

先說mysql的字符集問題。windows下可通過修改my.ini內的

# client section

[mysql]

default-character-set=utf8

# server section

[mysqld]

default-character-set=utf8

這兩個欄位來更改資料庫的預設字符集。第乙個是客戶端預設的字符集,第二個是伺服器端預設的字符集。假設我們把兩個都設為utf8,然後在mysql command line client裡面輸入「show variables like 「character_set_%」;」,可看到如下字元:

character_set_client latin1

character_set_connection latin1

character_set_database utf8

character_set_results latin1

character_set_server utf8

character_set_system utf8

其中的utf8隨著我們上面的設定而改動。此時,要是我們通過採用utf-8的php程式從資料庫裡讀取資料,很有可能是一串「?????」 或者是其他亂碼。網上查了半天,解決辦法倒是簡單,在連線資料庫之後,讀取資料之前,先執行一項查詢「set names utf8」,即在php裡為

mysql_query("

set names utf8")

; (注意大寫)

即可顯示正常(只要資料庫裡資訊的字元正常)。為什麼會這樣?這句查詢「set names utf8」到底是什麼作用?

到mysql命令列輸入「set names utf8;」,然後執行「show variables like 「character_set_%」;」,發現原來為latin1的那些變數「character_set_client」、「character_set_connection」、「character_set_results」的值全部變為utf8了,原來是這3個變數在搗蛋。查閱手冊,上面那句等於:

setcharacter_set_client

= utf8

;set

character_set_results

= utf8

;set

character_set_connection

= utf8;

看看這3個變數的作用:

資訊輸入路徑:client→connection→server;

資訊輸出路徑:server→connection→results。

換句話說,每個路徑要經過3次改變字符集編碼。以出現亂碼的輸出為例,server裡utf8的資料,傳入connection轉為latin1,傳入results轉為latin1,utf-8頁面又把results轉過來。如果兩種字符集不相容,比如latin1和utf8,轉化過程就為不可逆的,破壞性的。所以就轉不回來了。

但這裡要宣告一點,「set names utf8」作用只是臨時的,mysql重啟後就恢復預設了。

接下來就說到mysql在伺服器上的配置問題了。豈不是我們每次對資料庫讀寫都得加上「set names utf8」,以保證資料傳輸的編碼一致?能不能通過配置mysql來達到那三個變數預設就為我們要想的字符集?手冊上沒說,我在網上也沒找到答案。所以,從伺服器配置的角度而言,是沒辦法省略掉那行**的。

總結以下幾點:

要保證select的返回與程式編碼一致,即character_set_results與程式編碼一致.

要保證程式編碼與瀏覽器一致,即程式編碼與一致.

資料庫編碼問題

lmysql有六處使用了字符集,分別為 client connection database results server system。client是客戶端使用的字符集。connection是連線資料庫的字符集設定型別,如果程式沒有指明連線資料庫使用的字符集型別就按照伺服器端預設的字符集設定。da...

資料庫機制 編碼 型別 資料庫基礎內容

編碼 gb2312 gbk 國標編碼 unicode 國籍編碼集,不是編碼本身 utf 8 utf 16實際使用的國際編碼 latin1 iso 8859 1 歐洲編碼集,這兩個是一種 資料庫機制 本質 資料持久化的方式 依賴 資料儲存結構 功能 快速增刪改查 型別 單檔案資料表 dbf csv檔案...

獲取資料庫內容 php php如何獲取資料庫內容

php如何獲取資料庫內容 閱讀 68 php獲取資料庫內容怎麼?比如html中有個名為1.2.3的三個 資料庫有三種對應顏色,如何讓每乙個 背景顏色 從資料庫中取值顯示。處理 如 從資料庫根據 id 獲取顏色 function getcolor db,id if result db query se...