激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JDBC連接mysql亂碼異常問題處理總結

JDBC連接mysql亂碼異常問題處理總結

2021-03-01 14:21追求技術的萌新 Java教程

這篇文章主要介紹了JDBC連接mysql亂碼異常問題處理的辦法和思路,有需要的朋友參考學習下。

前段時間學習jdbc,要連接mysql獲取數據。按照老師的樣例數據,要存一些名字之類的信息,用的都是英文名,我當時就不太想用英文,就把我室友的名字存了進去,嘿嘿,結果,出問題了。

JDBC連接mysql亂碼異常問題處理總結

JDBC連接mysql亂碼異常問題處理總結

 連接數據庫語句:

?
1
static final string db_url = "jdbc:mysql://localhost/filemanagement";

查詢語句:

?
1
private static final string theuserquery = "select name, password, role from userinfo where name = ?";

我是用我的名字做的查詢,nullpointerexception,很明顯,沒有用我的名字查到對應的數據,而數據庫中是存在的。這是為什么呢?

百度到的答案是中文亂碼,解決方案是,修改連接數據庫語句為:

?
1
static final string db_url = "jdbc:mysql://localhost/filemanagement?useunicode=true&characterencoding=gbk";

重試!

JDBC連接mysql亂碼異常問題處理總結

可以了!但這是為什么呢?那兩個參數是什么?為什么加上之后就解決問題了?

這兩個參數解釋如下:

JDBC連接mysql亂碼異常問題處理總結

兩個參數的缺省值都是false。也就是說我們在連接mysql的時候指定了連接使用的字符集后,一切就正常了。但我還是不太了解其中的機制,所以繼續查。

原來mysql連接進行查詢等操作時存在一個字符集轉換過程:

1. mysql server收到請求時將請求數據從character_set_client轉換為character_set_connection;

2. 進行內部操作前將請求數據從character_set_connection轉換為內部操作字符集,其確定方法如下:

• 使用每個數據字段的character set設定值;

• 若上述值不存在,則使用對應數據表的default character set設定值(mysql擴展,非sql標準);

• 若上述值不存在,則使用對應數據庫的default character set設定值;

• 若上述值不存在,則使用character_set_server設定值。

3. 將操作結果從內部操作字符集轉換為character_set_results。

這些character set代表什么呢?

character_set_server:默認的內部操作字符集

character_set_client:客戶端來源數據使用的字符集

character_set_connection:連接層字符集

character_set_results:查詢結果字符集

character_set_database:當前選中數據庫的默認字符集

character_set_system:系統元數據(字段名等)字符集

還查到了一些常見問題,雖然和我的問題不太一樣,但很有參考意義。

• 向默認字符集為utf8的數據表插入utf8編碼的數據前沒有設置連接字符集,查詢時設置連接字符集為utf8

– 插入時根據mysql服務器的默認設置,character_set_client、character_set_connection和character_set_results均為latin1;

– 插入操作的數據將經過latin1=>latin1=>utf8的字符集轉換過程,這一過程中每個插入的漢字都會從原始的3個字節變成6個字節保存;

– 查詢時的結果將經過utf8=>utf8的字符集轉換過程,將保存的6個字節原封不動返回,產生亂碼……

• 向默認字符集為latin1的數據表插入utf8編碼的數據前設置了連接字符集為utf8

– 插入時根據連接字符集設置,character_set_client、character_set_connection和character_set_results均為utf8;

– 插入數據將經過utf8=>utf8=>latin1的字符集轉換,若原始數據中含有\u0000~\u00ff范圍以外的unicode字 符,會因為無法在latin1字符集中表示而被轉換為“?”(0x3f)符號,以后查詢時不管連接字符集設置如何都無法恢復其內容了。

(此部分摘自鳥哥的blog,稍后附上鏈接)

我數據庫的表都是設置的utf8編碼,但我第一次連接的時候沒有設置連接字符集,所以默認為latin1,經過了從utf8=>latin1的轉換,所以產生亂碼。我第二次用的gbk編碼,也沒用utf8編碼,為什么也可以了呢?其實是一個道理,中文不在latin1的編碼中可是在gbk和utf8中,所以不會出問題。

以上就是為大家整理的關于jdbc連接mysql亂碼異常的解決辦法,如果大家還有任何不明白的地方可以在下方的留言區討論。

原文鏈接:https://www.cnblogs.com/sijie-long/p/jdbc-connectionException.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av免费在线观看国产 | 免费视频a| 欧美视频国产精品 | 特级毛片全部免费播放器 | 国产羞羞视频在线免费观看 | av播播| 欧美成人精品一区 | 精品久久久久久久久久中文字幕 | 一区二区三区在线观看免费 | 久久精品亚洲一区 | 久久中文一区 | h视频在线免费观看 | 91女上位 在线播放 bt 自拍 另类 综合 欧美 | 深夜免费观看视频 | 精品久久久久久综合日本 | 国产精品一区二区三区99 | 色综合视频网 | 国产大片在线观看 | 一级做a爱片久久毛片a高清 | 亚洲第五色综合网 | 国产青草视频在线观看视频 | 羞羞视频一区 | 精品成人av一区二区在线播放 | 成人在线视频免费观看 | 国产真实孩交 | 在线成人免费观看视频 | 91美女视频在线 | 久久爽精品区穿丝袜 | 久久精品一级片 | 13一14毛片免费看 | 日韩精品一区二区在线 | 国产欧美精品一区二区三区四区 | 国产一级二级视频 | 黄色7777| 毛片网站视频 | 午色影院 | xxxx18韩国护士hd老师 | 成人永久免费视频 | 欧美一级高清免费 | 护士hd欧美free性xxxx | 99国内精品 |