當前位置:首頁 » 數據倉庫 » mysql資料庫查詢亂碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mysql資料庫查詢亂碼

發布時間: 2022-12-20 15:10:59

① 怎樣解決Mysql中文顯示亂碼

MySQL中文亂碼問題解決方法
1.問題描述
當向 MySQL 資料庫插入一條帶有中文的數據時,會出現亂碼,即插入不成功或顯示時是亂碼。
2.問題原因分析
(1)可以先使用語句 show variables like 'character%';來查看當前資料庫的相關編碼集。
可以看到 MySQL 有六處使用了字元集,分別為:client 、connection、database、results、server 、system。其中與伺服器端相關:database、server、system(永遠無法修改,就是utf-8);與客戶端相關:connection、client、results 。
了解了上面的信息我們來分析下亂碼的原因,問題出在了當前的 CMD 客戶端窗口,因為當前的 CMD 客戶端輸入採用 GBK 編碼,而資料庫的編碼格式為 UTF-8,編碼不一致導致了亂碼產生。
3.解決方法
而當前 CMD 客戶端的編碼格式無法修改,所以只能修改 connection、 client、results 的編碼集來告知伺服器端當前插入的數據採用 GBK 編碼,而伺服器的資料庫雖然是採用 UTF-8 編碼,但卻可以識別通知伺服器端的 GBK 編碼數據並將其自動轉換為 UTF-8 進行存儲。可以使用如下語句來快速設置與客戶端相關的編碼集:set names gbk;
設置完成後即可解決客戶端插入數據或顯示數據的亂碼問題了,但我們馬上會發現這種形式的設置只會在當前窗口有效,當窗口關閉後重新打開 CMD 客戶端的時候又會出現亂碼問題;那麼,如何進行一個一勞永逸的設置呢?在 MySQL 的安裝目錄下有一個 my.ini 配置文件,通過修改這個配置文件可以一勞永逸的解決亂碼問題。在這個配置文件中 [mysql] 與客戶端配置相關,[mysqld] 與伺服器配置相關。默認配置如下:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
這時只需要將下的默認編碼 default-character-set=utf8 改為 default-character-set=gbk ,重新啟動 MySQL 服務即可。

② mysql資料庫表裡中文亂碼應該選哪種編碼

資料庫中關於字元集的種類有很多,個人建議,資料庫字元集盡量使用utf8(utf-8),以使你的數據能很順利的實現遷移,因為utf8字元集是目前最適合於實現多種不同字元集之間的轉換的字元集,盡管你在命令行工具上無法正確查看資料庫中的內容,我依然強烈建議使用utf8作為默認字元集.如果你想使用gb2312編碼,那麼建議你使用latin1作為數據表的默認字元集,這樣就能直接用中文在命令行工具中插入數據,並且可以直接顯示出來.而不要使用gb2312或者gbk等字元集,如果擔心查詢排序等問題,可以使用binary屬性約束 對編程有影響的主要是客戶端字元集和資料庫字元集(還有一個伺服器字元集,不知道干什麼用的), 資料庫中常用的操作就是保存數據和讀取數據,在這過程中,亂不亂碼和資料庫字元集貌似沒有什麼關系。我們只要保證寫入時選擇的字元集和讀取時選擇的字元集一致,即只需保證兩次操作的客戶端字元集一致即可。 x0dx0a在MySQL的客戶端上執行一次查詢的過程一般是,在客戶端的提示符後面輸入一條SQL語句,回車,然後終端顯示出查詢的結果。這個過程中,只有終端和三個MySQL的系統變數指定了正確的字元集,才能保證我們將一個正確的SQL語句送到伺服器,然後伺服器返回正確的結果,並且在終端正確顯示。 x0dx0a三個MySQL的系統變數是: x0dx0a1. character_set_client,終端字元集,告訴Server客戶端提交的SQL語句的編碼格式 x0dx0a2. character_set_connection,連接字元集,是伺服器翻譯SQL語句時用到的編碼格式 x0dx0a3. character_set_results,返回的結果集的字元集,是伺服器返回結果集之前把結果集轉換成的編碼格式 x0dx0a在MySQL終端通過執行命令 show variables like 『char%』 可以查看這幾個變數的值。這三個變數通常都設定為同一種字元集,用命令set names [charset name]就可以修改這三個變數的值。一般來說,只要你設定了能夠表示你的數據的字元集,你查詢的結果都可以在終端正確顯示。 x0dx0a舉個例子,使用的表t1是utf8編碼,表中的欄位c1繼承了這個編碼,表創建如下 x0dx0amysql> create table t1 ( c1 text not null ) character set utf8; x0dx0a用的字元是漢字「范」,gbk編碼為B7 B6,utf8編碼為E8 8C 83 x0dx0a用下面的SQL語句插入數據 x0dx0amysql> insert into t1 values( 『范』); x0dx0aa)如果終端設置為utf8,並且執行了 set names utf8,那麼插入到資料庫中的就是「范」這個字的utf8編碼,這個過程中MySQL不需要做編碼轉換。寫入資料庫的內容可以通過執行 select hex( c1 ) from t1 得到數據的十六進制編碼來驗證。 x0dx0ax0dx0ab)如果終端設置為 utf8,並且執行了set names gbk,那麼執行完這個插入操作後,寫入的二進制數據是E9 91 BC,這是「漢字「鑼」的utf8編碼。這是因為,終端輸入的「范」用的是utf8編碼,而伺服器以為終端發送過來的內容是gbk編碼,所以在向t1表中插入的時候進行了一次gbk到utf8的轉換,結果當然是錯誤的。 x0dx0ax0dx0ac)如果終端設置為gbk,並且執行了set names gbk,那麼執行完插入操作後,寫入t1的依然是「范」這個字的utf8編碼。插入過程中,終端輸入的是「范」的gbk編碼B7 B6,伺服器被告知終端發過來的SQL語句是gbk編碼(由character_set_client指定),所以在插入數據前做了一次gbk到utf8的編碼轉換。 x0dx0ax0dx0ad)如果終端設置為gbk,並且執行了set names utf8,那麼執行完插入操作後,MySQL會報出一個數據被截斷的警告。實際上,輸入終端的是「范」這個字元的gbk編碼B7 B6,而伺服器被告知客戶端發過來的SQL語句是utf8編碼,所以在執行過程中沒有做轉碼,直到插入數據的時候,發現B7 B6不符合utf8的編碼規則,給出了警告信息,實際插入的數據是3F 3F,也就是兩個問號。 x0dx0ax0dx0a查詢的時候是同樣的道理,MySQL也是根據set names設定的字元集來對返回給客戶端的結果集做相應的編碼轉換,如果轉換的結果和終端顯示的字元集一致,就能正確顯示,如果不一致就是亂碼。 x0dx0ax0dx0a結論是,只要終端的字元集和set names指定的字元集一致就可以讓MySQL在處理過程中執行正確的轉碼並且正確地顯示。 x0dx0ax0dx0a另外,如果通過程序操作MySQL資料庫, 那麼也需要事先執行set names命令來指定程序希望輸出的字元集。比如,用程序從一個utf8編碼的資料庫向另外一個gbk編碼的資料庫進行數據遷移,在選取源資料庫數據之前,需要執行set names gbk,才能取到gbk編碼的數據。

③ mysql出現亂碼問題如何解決

mysql是我們項目中非常常用的數據型資料庫。但是因為我們需要在資料庫保存中文字元,所以經常遇到資料庫亂碼情況。下面就來介紹一下如何徹底解決資料庫中文亂碼情況。

中文亂碼

④ 使用MySQL導入數據時出現亂碼的兩種解決方法

使用MySQL導入數據時出現亂碼的兩種解決方法如下:1、添加 –default-character-set

先檢查一下,目標數據編碼。 56雲 分享

使用目標庫編碼導入數據,如下:

2、修改資料庫編碼

此教程方法必須謹慎使用,需初始化資料庫或將企業資料庫技術可以覆蓋情況下使用,否則導致資料庫出現亂碼



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

一、轉碼失敗
在數據寫入到表的過程中轉碼失敗,資料庫端也沒有進行恰當的處理,導致存放在表裡的數據亂碼。
針對這種情況,前幾篇文章介紹過客戶端發送請求到服務端。
其中任意一個編碼不一致,都會導致表裡的數據存入不正確的編碼而產生亂碼。
比如下面簡單一條語句:
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 個字元。

⑥ mysql出現亂碼問題如何解決

1、修改安裝文件根目錄下的my.ini文件:x0dx0a搜索欄位default-character-set,設置其值為utf8/gbk之一(注意設置utf8的時候不能設成utf-8)x0dx0a再去重啟MySQL伺服器x0dx0a如果還是出現亂碼,接著執行下面操作x0dx0a2、修改資料庫編碼x0dx0a在安裝目錄的data目錄下找到你出現亂碼的資料庫對應的文件夾(這個文件夾即是你這個資料庫存放數據的地方),x0dx0a進入找到db.opt文件(即此資料庫的編碼配置文件),修改值為下面的x0dx0adefault-character-set=gbkx0dx0adefault-collation=gbk_chinese_cix0dx0a再去重啟MySQL伺服器x0dx0a如果還是出現亂碼,接著執行下面操作x0dx0a3、再不行,備份原資料庫數據,直接drop掉這個資料庫x0dx0a重新創建資料庫並設置編碼x0dx0acreate database yourDB character set gbk;x0dx0a別忘了重啟MySQL伺服器綜上:如果還沒有解決,我也沒轍了。重裝吧,重裝的時候設置下編碼三處的編碼要一致

⑦ mysql 查詢出現亂碼全是問號

關於亂碼的原因不好一下說出,給出以下辦法,嘗試排除法來解決一下看看:

解決MySql數據亂碼:
1 寫過濾器設置編碼格式(格式和JSP頁面的編碼一樣),或則在請求裡面寫request.setCharacterEncoding("編碼方式");

2 如果是查詢出數據亂碼,在鏈接的URL上加上編碼格式(你這里加了,沒問題);

3 修改my.ini文件裡面的 default-character-set= 您要的編碼格式 (一共有兩處,你查找一下 改為一樣的編碼格式)

4 如果是寫入到資料庫之後是亂碼(前提是已經寫了過濾器處理編碼),修改my.ini文件裡面查找sql-mode 設置 sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
如果出現亂碼情況 就試試吧!

AUTO_INCREMENT=11 這個意思就是ID或是指定的列從11開始自增...比如你添加第一條記錄,則變成12,以此類推......

⑧ 為什麼在mysql中查詢出來的數據是亂碼

mysql數據亂碼問題可能有以下三種原因: 1.server本身設定問題,例如還停留在latin1版本; 2.table的語系設定問題(包含character與collation); 3.客戶端程式(例如php,java)的連線語系設定問題; 建議使用utf8!!!! 想要避免mysql的中文亂碼問題,可以...