溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java連接MySQL出現中文亂碼如何解決

發布時間:2021-07-01 16:24:35 來源:億速云 閱讀:346 作者:Leah 欄目:編程語言

Java連接MySQL出現中文亂碼如何解決,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

MySQL默認編碼是latin1

mysql> show variables like 'character%';  +--------------------------+--------------------------+  | Variable_name            | Value                    |  +--------------------------+--------------------------+  | character_set_client     | latin1                   |  | character_set_connection | latin1                   |  | character_set_database   | latin1                   |  | character_set_filesystem | binary                   |  | character_set_results    | latin1                   |  | character_set_server     | latin1                   |  | character_set_system     | utf8                     |  | character_sets_dir       | D:\MySQL\share\charsets\ |  +--------------------------+--------------------------+  創建數據表并插入數據  mysql> use test;  mysql> create table messages (      -> id int(4) unsigned auto_increment primary key,      -> message varchar(50) not null     -> ) engine=myisam default charset=utf8;  mysql> insert into messages (message) values ("測試MySQL中文顯示");  mysql> select * from messages;  +----+-------------------+  | id | message           |  +----+-------------------+  |  1 | 測試MySQL中文顯示 |  +----+-------------------+  編寫程序(Java)  import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.Statement;  public class JDBCTest {      public static void main(String[] args) {          String driver = "com.mysql.jdbc.Driver";          String url = "jdbc:mysql://localhost:3306/test";          String user = "root";          String password = "root";          try {              Class.forName(driver);              Connection conn = DriverManager.getConnection(url, user, password);              Statement stmt = conn.createStatement();              stmt.executeUpdate("insert into messages (message) values ('測試MySQL編碼')");              ResultSet rs = stmt.executeQuery("select * from messages");              while (rs.next()) {                  int id = rs.getInt("id");                  String message = rs.getString("message");                  System.out.println(id + " " + message);              }              rs.close();              stmt.close();              conn.close();          } catch (Exception e) {              e.printStackTrace();          }      }  }  程序輸出  1 ????MySQL????????  2 ??MySQL??

我們看到,盡管使用數據庫時我們能夠正常的添加和顯示中文,但是在使用程序連接數據庫時并不能夠正常顯示中文,為此我們需要修改MySQL的默認編碼,編輯my.ini(MySQL配置文件)文件對編碼進行修改

設置MySQL的默認字符集為utf8,找到客戶端配置[client]在下面添加。

default-character-set=utf8

找到服務器配置[mysqld]在下面添加

default-character-set=utf8

設定MySQL數據庫以utf8編碼運行,連接MySQL數據庫時使用utf8編碼

停止和重新啟動MySQL

net stop mysql

net start mysql

重新連接數據庫,查看編碼,數據表內容

mysql> show variables like 'character%';  +--------------------------+--------------------------+  | Variable_name            | Value                    |  +--------------------------+--------------------------+  | character_set_client     | utf8                     |  | character_set_connection | utf8                     |  | character_set_database   | utf8                     |  | character_set_filesystem | binary                   |  | character_set_results    | utf8                     |  | character_set_server     | utf8                     |  | character_set_system     | utf8                     |  | character_sets_dir       | D:\MySQL\share\charsets\ |  +--------------------------+--------------------------+  mysql> use test;  mysql> select * from messages;  +----+-------------------------------+  | id | message                       |  +----+-------------------------------+  |  1 | 虜芒脢脭MySQL脰脨脦脛脧脭脢戮             |  |  2 | ??MySQL??                     |  +----+-------------------------------+  這里顯示依然是亂碼主要是因為之前使用的編碼不同造成的,重新運行之前寫的程序:java JDBCTest  1 ????MySQL????????  2 ??MySQL??  3 測試MySQL編碼  從第三條記錄我們可以看到現在程序連接數據庫時可以正常的添加和顯示中文了  mysql> select * from messages;  +----+-------------------------------+  | id | message                       |  +----+-------------------------------+  |  1 | 虜芒脢脭MySQL脰脨脦脛脧脭脢戮             |  |  2 | ??MySQL??                     |  |  3 | 嫻嬭瘯MySQL緙栫爜                 |  +----+-------------------------------+

看回數據庫的顯示,我們會很奇怪的發現為什么顯示的都是亂碼,這主要是和windows下命令行的編碼有關,在命令行上查看屬性->選項的當前代碼頁:936   (ANSI/OEM - 簡體中文 GBK)(本人機子上是這樣顯示的)
也就是說命令行上使用的是GBK編碼,而我們是在程序連接時使用utf8進行添加的,所以會出現有亂碼,現在我們將客戶端的編碼改成gb2312或gbk試一下

mysql> show variables like 'character%';  +--------------------------+--------------------------+  | Variable_name            | Value                    |  +--------------------------+--------------------------+  | character_set_client     | gb2312                   |  | character_set_connection | gb2312                   |  | character_set_database   | utf8                     |  | character_set_filesystem | binary                   |  | character_set_results    | gb2312                   |  | character_set_server     | utf8                     |  | character_set_system     | utf8                     |  | character_sets_dir       | D:\MySQL\share\charsets\ |  +--------------------------+--------------------------+  mysql> use test;  mysql> select * from messages;  +----+-------------------+  | id | message           |  +----+-------------------+  |  1 | ????MySQL???????? |  |  2 | ??MySQL??         |  |  3 | 測試MySQL編碼     |  +----+-------------------+

現在可以看到中文正常顯示了(主要是因為utf8也支持中文),所以當我們使用命令行工具連接數據庫的時候***將客戶端的編碼改一下,如果使用GUI的話就不必了,同時修改客戶端的編碼之后程序依然能夠正常顯示(以上兩點已經測試)

所以如果在程序中要顯示中文的話我們可以選用utf8,gb2312,gbk這三種編碼,但是如果想在命令行添加中文數據或者查看的話就需要將客戶端的編碼設置為gb2312或gbk了,還是那句,CMD的編碼有關

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女