mysql資料庫中存進的是中文,為什麼查出來的亂碼

2021-05-02 04:01:02 字數 3176 閱讀 1838

1樓:匿名使用者

你的mysql客戶端和你的mysql伺服器的編碼不一樣,,應為utf8編碼的中文是3個字元,而gbk編碼的中文是兩個字元,,這樣解析出來的中文就是亂碼了。。你需要該資料庫的字符集編碼。。。具體如下:

找到mysql 的ini配置檔案

在[client]這裡加上default_character_set = utf8

在[mysqld]這裡加上character_set_server = utf8

不出意外應該可以了

2樓:匿名使用者

呵呵,mysql資料庫編碼是比較複雜的,既然你資料庫中沒有出現亂碼,那就是說從資料庫讀取轉換的時候出現了亂碼。你只說是亂碼,沒有相關資訊,大家沒法幫你解決。所以你首先,開啟mysql控制台。

輸入: show variebles like 「character_set_%」;然後把得到的資訊,貼出來,我看看問題是出在**了。

3樓:匿名使用者

開啟資料庫裡看看顯示的是不是亂碼如果不是的話 就是你jsp頁面的編碼問題在頁面的第一行加上<%@ page contenttype="text/html; charset=gb2312"%>或者選擇utf-8

4樓:匿名使用者

mysql設定裡面不支援中文吧.

5樓:匿名使用者

你的系統中毒了,什麼問題你都遇到了。你好強大!

6樓:愛可生雲資料庫

一、轉碼失敗

在資料寫入到表的過程中轉碼失敗,資料庫端也沒有進行恰當的處理,導致存放在表裡的資料亂碼。

針對這種情況,前幾篇文章介紹過客戶端傳送請求到服務端。

其中任意乙個編碼不一致,都會導致表裡的資料存入不正確的編碼而產生亂碼。

比如下面簡單一條語句:

set @a = "文字字串";

insert into t1 values(@a);

變數 @a 的字元編碼是由引數 character_set_client 決定的,假設此時編碼為 a,也就是變數 @a 的編碼。

2. 寫入語句在傳送到 mysql 服務端之前的編碼由 character_set_connection 決定,假設此時編碼為 b。

3. 經過 mysql 一系列詞法,語法解析等處理後,寫入到表 t1,表 t1 的編碼為 c。

那這裡編碼 a、編碼 b、編碼 c 如果不相容,寫入的資料就直接亂碼。

二、客戶端亂碼

表資料正常,但是客戶端展示後出現亂碼。

這一類場景,指的是從 mysql 表裡拿資料出來返回到客戶端,mysql 裡的資料本身沒有問題。客戶端傳送請求到 mysql,表的編碼為 d,從 mysql 拿到記錄結果傳輸到客戶端,此時記錄編碼為 e(character_set_results)。

那以上編碼 e 和 d 如果不相容,檢索出來的資料就看起來亂碼了。但是由於資料本身沒有被破壞,所以換個相容的編碼就可以獲取正確的結果。

這一類又分為以下三個不同的小類:

1)字段編碼和表一致,客戶端是不同的編碼

比如下面例子, 表資料的編碼是 utf8mb4,而 session 1 發起的連線編碼為 gbk。那由於編碼不相容,檢索出來的資料肯定為亂碼。

2)表編碼和客戶端的編碼一致,但是記錄之間編碼存在不一致的情形

比如表編碼是 utf8mb4,應用端編碼也是 utf8mb4,但是表裡的資料可能一半編碼是 utf8mb4,另外一半是 gbk。那麼此時表的資料也是正常的,不過此時採用哪種編碼都讀不到所有完整的資料。這樣資料產生的原因很多,比如其中一種可能性就是表編碼多次變更而且每次變更不徹底導致(變更不徹底,我之前的篇章裡有介紹)。

舉個例子,表 t3 的編碼之前是 utf8mb4,現在是 gbk,而且兩次編碼期間都被寫入了正常的資料。

3)每個欄位的編碼不一致,導致亂碼和第二點一樣的場景。不同的是:非記錄間的編碼不統一,而是每個字段編碼不統一。

舉個例子,表 c1 字段 a1,a2。a1 編碼 gbk,a2 編碼是 utf8mb4。那每個字段單獨讀出來資料是完整的,但是所有字段一起讀出來,資料總會有一部分亂碼。

三、latin1

還有一種情形就是以 latin1 的編碼儲存資料

估計大家都知道字符集 latin1,latin1 對所有字元都是單位元組流處理,遇到不能處理的位元組流,保持原樣,那麼在以上兩種存入和檢索的過程中都能保證資料一致,所以 mysql 長期以來預設的編碼都是 latin1。這種情形,看起來也沒啥不對的點,資料也沒亂碼,那為什麼還有選用其他的編碼呢?原因就是對字元儲存的位元組數不一樣,比如 emoji 字元 "❤",如果用 utf8mb4 儲存,占用 3 個位元組,那 varchar(12) 就能存放 12 個字元,但是換成 latin1,只能存 4 個字元。

7樓:淡淡的雷人生活

首先檢視mysql字符集

show variables like 'character_set%';

修改配置檔案 vim /etc/my.cnf[client]

default-character-set=utf8[mysqld]

character_set_server=utf8

為什麼插入到mysql資料庫中的中文顯示亂碼

mysql資料庫正常,php查出來中文變亂碼了

8樓:匿名使用者

典型的編碼問題。

在php中mysql_connect之後,加一句:mysql_query('set names utf8', $con);用來設定一下編碼。

php檔案的編碼(一般是utf8無bom)也應該與資料庫的編碼一致。

顯示是通過html完成的,因此應該在中的前,指定html的編碼為utf8.

總之,養成良好的編碼習慣,資料庫建立的時候就用utf8,資料表也用utf8,取數時set names utf8, 取出來之後顯示時也用utf8。

9樓:鳳凰舞者論

安裝資料庫的地方找到my.ini並設定default-character-set=gbk

如果你是linux 系統 locate my.ini然後設定成utf8

總之,php和mysql都要保持一致的編碼。

10樓:匿名使用者

你先看看你的php程式的編碼是否和資料庫一致呀....不要將utf-8和gbk混用

C連線mysql資料庫無法讀取資料庫表中資訊求大神指點

資料庫是否有資料?你的data source localhost user id root password 有有沒有錯誤 try這裡,看是執行到哪一步報錯了 大師們幫我看看這個問題怎麼解決,c 中把資訊寫不進mysql資料庫!你先檢查sql語句有沒有戳錯 檢查方法是先在資料庫裡面執行一遍 再cop...

mysql資料庫查詢的問題,mysql 資料庫查詢的乙個問題

select from select t.num if category id t.category id,num 1,1 as cal rank,category id t.category id from select from goods order by category id asc go...

MySQL中修改資料庫ALTER DATABASE語法的使用

用alter database語句修改資料庫 1.將名為 例二資料庫 的資料庫改名為 例七資料庫 顯示 列印 alter database 例二資料庫 modify name 例七資料庫 或顯示 列印1 exec sp renamedb 例二資料庫 例七資料庫 2.為 例六資料庫 增加乙個資料檔案 ...