java寫入mysql數據庫亂碼問題解決方法詳解

  1. 確保數據庫數據表創建的編碼一致:

創建數據庫的時候:

              CREATE   DATABASE   `Db` 
               
  CHARACTER   SET   'utf8 ' 
              
   COLLATE   'utf8_general_ci'

注:CHARACTER   SET   'utf8 ':這是設置字符編碼;

   COLLATE   'utf8_general_ci':設置字符排序編碼

可以通過命令行設置:alter table tableA character set utf8

建表的時候:      

      CREATE   TABLE   `TableA`   (                                                      `ID`   varchar(40)   NOT   NULL   default   ' '
              `UserID`   
varchar(40)   NOT   NULL   default   ' ',  )                         ENGINE=InnoDB   DEFAULT   CHARSET=utf8

注:設置表的字符編碼 DEFAULT   CHARSET=utf8

可以通過命令行設置:alter table tableA charset utf

設置URL的時候:  

jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8 

 注:這裏useUnicode=true&characterEncoding=UTF-8這裏可以不用添加,默認useUnicode爲true

characterEncoding會自動檢測當前用的數據庫變而進行改變

2.上面的這些設置了可能會用錯誤,這需要修改mysql中my.ini配置文件

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

default-character-set=utf8

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

default-character-set=utf8

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

停止和重新啓動MySQL

net stop mysql

net start mysql

注:找到服務器配置[mysqld]在下面添加:default-character-set=utf8這裏加入會導致數據庫無法啓動

單獨加入default-character-set=utf8即可

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

  1. mysql> show variables like 'character%';

  2. --------------------------+-----------------------------------------------+

  3. | Variable_name            | Value                                         |

  4. +--------------------------+-----------------------------------------------+

  5. | character_set_client     | utf8                                          |

  6. | character_set_connection | utf8                                          |

  7. | character_set_database   | latin1                                        |

  8. | character_set_filesystem | binary                                        |

  9. | character_set_results    | utf8                                          |

  10. | character_set_server     | latin1                                        |

  11. | character_set_system     | utf8                                          |

  12. | character_sets_dir       | d:\wamp\bin\mysql\mysql5.5.20\share\charsets\

從上面可以看到,除了| character_set_database   | latin1 和character_set_server     | latin1     兩項爲latin1編碼其他都爲utf8編碼,這裏導致client和server的編碼不一致了,插入數據依然中文會亂碼

解決方法:

[mysqld]在下面添加:character_set_server=utf8,然後從新啓動

[mysqld]

port=3306

character_set_server=utf8

#default-character-set=utf8


使用如下命令

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:\wamp\bin\mysql\mysql5.5.20\share\charsets\ |

+--------------------------+-----------------------------------------------

這裏可以看到所有的編碼都一致了,就不會亂碼了

  |

| f512ebc1-e587-4baf-bd17-42e27236621f | ???    | female | 2017-02-24 | 119       | [email protected] | ??,??,?java      | VIP  | ??          |

之前出入的中文亂。下面爲修改之後的結果

| ff1355cb-b25c-4431-8f96-7f56875b582f | 劉備       | female | 2017-02-24 | 119       | [email protected] | 吃飯,睡覺,學java        | VIP  | 美女           |

在命令提示中默認爲gbk編碼,要想不亂碼顯示,在使用查詢語句時使用set names gbk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章