1. java中利用JDBC向MySql資料庫中插入中文出現亂碼,求解決辦法
你應該是安裝mysql的時候編碼你是選擇默認的吧。
你可以找到mysql的安裝目錄MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新配置下專就可以屬了。一般選擇utf-8編碼。
再一個如果資料庫開始就建立好了。alter database 表名 character set utf8;
連接資料庫設置編碼
jdbc:mysql://地址:3306/資料庫名?characterEncoding=utf8
如果是windows的話
1、中止MySQL服務
2、在MySQL的安裝目錄下找到my.ini,如果沒有就把my-medium.ini復制為一個my.ini即可
3、打開my.ini以後,在[client]和[mysqld]下面均加上default-character-set=utf8,保存並關閉
4、啟動MySQL服務
2. MySql中插入中文顯示的是亂碼
段都有編碼設置.
出現亂碼肯定是你現在用的編碼混亂造成的
解決辦法:
第一步 先改資料庫編碼
先修改你的資料庫,如果你頁面用的是UTF-8編碼那麼你資料庫內的編碼也需要設置為UTF-8,每個欄位都需要設置.要保持內外一致,你可以用Navicat for MySQL工具,這個工具里能看得很清除,如果表\欄位很多的話你可以導出SQL語句,然後把SQL語句中相應的編碼替換例如gb2312替換成utf8,然後再重新創建一個庫,創建的時候字元集選擇utf8的再把SQL語句導入,檢查一下所有的編碼都是utf8的就OK
第二步 程序修改
1\讀庫的時候
mysql_query("set names utf8");
2\每個頁面頭部加上一句
header("content-Type: text/html; charset=utf-8");
3\檢查所有的編碼聲明是否正確
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
4\檢查頁面中現有文字所使用的編碼是否正確,推薦你使用editplus在右下角會有顯示UTF-8或者ANSI,要保證所有帶有中文的文件打開後顯示的編碼集是UTF-8,如果不是的話可以將所有文件打開然後從菜單選擇"文檔"-"文件編碼"-"文件編碼(多文件)",然後選擇所有的文件點確定,更改編碼為UTF-8確定!
OK到此位置大功告成,所有的編碼一致,絕對不會再出現亂碼了,多說一句.對於MYSQL操作工具的選擇本人只推薦兩款,一是大家都熟悉的PHPMYADMIN 再就是Navicat for MySQL也有很多人都在用.至於MYSQL-font實在有些垃圾,有時顯示出來的資料庫結構和實際的都有差別....不敢苟同,另外MYSQL官方出的SQLyog對於編碼的支持太差勁了,很難控制具體的編碼,所以最好也不要用
3. Ubuntu下MySQL中文亂碼的問題解決
在學習Django過程中,遇到在Ubuntu下MySQL資料庫中插入中文字元時出現亂碼問題。通過查看資料庫編碼,發現資料庫默認字元集為latin1,與插入的中文字元編碼不匹配,導致亂碼現象。
首先嘗試修改資料庫編碼設置,包括client、connection、database、filesystem、results、server和system等,將它們統一設置為utf8。修改後重啟MySQL服務,查看編碼設置,確認修改已生效。然而在實際操作中,編碼設置在重啟服務時並未持久化,導致亂碼問題依舊存在。
於是進一步檢查my.cnf配置文件,添加`default-character-set=utf8`到[client]、[mysqld]和[mysql]配置塊中。重啟MySQL服務後再次查看編碼設置,確認設置已正確生效。但重啟服務時,發現MySQL服務處於等待狀態,執行`mysql -u root -p`命令時出現異常,提示無法連接本地MySQL伺服器。初步猜測可能是發生了某種類型的死鎖。
問題解決過程中,嘗試了多種方法,最終通過查看MySQL錯誤日誌文件`/var/log/mysql/error.log`找到解決辦法。關鍵在於在`[mysqld]`配置塊中,將`default-character-set=utf8`修改為`character_set_server=utf8`。這一修改允許MySQL服務在重啟後持久化編碼設置,從而解決了亂碼問題。不過需要注意的是,由於編碼設置變更,之前創建的資料庫需要重新創建以匹配新的編碼標准。
總結整個過程,解決Ubuntu下MySQL中文亂碼問題的關鍵在於正確配置MySQL服務的字元集設置,確保在服務重啟後編碼設置能夠持久化。通過配置文件修改和重啟服務的方式,最終實現了問題的解決。在處理類似問題時,建議從查看當前配置、修改配置、重啟服務並驗證配置是否生效的流程入手,同時關注錯誤日誌,以獲取更多關於問題的具體信息。
4. 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 個字元。