1.項目是SSH架構,一開始我以為是調用hibernate的save方法出現的問題,于是更改了applicationContext.xml中對hibernate的配置,在
1true 2UTF-8
但是經過測試,發現mysql中顯示中文的字段依舊是一連串的問號。于是開始著手查找數據庫自身的編碼問題。
2.按照網上說的,首先修改mysql的配置文件my.ini。
在client中修改如下字段:default-character-set = utf8
在mysqld中修改如下字段:
character-set-server = utf8
collation-server = utf8_general_ci
在mysql中修改如下字段:default-character-set = utf8
如果配置文件沒有上述字段,自行添加即可。修改完成后發現情況依舊沒有改觀。于是只好看是查看數據庫和數據庫表的屬性。
3.打開命令行,首先輸入show variables查看下面幾個字段:
character_set_client
character_set_connection
character_set_database
character_set_server
collation_connection
collation_database
collation_server
是不是都變成了utf8。一般情況下修改了配置文件之后,上面幾個字段都是沒問題的。如果有問題,可以使用如下命令:set @@character_set_xxx = utf8解決。
當然也可以輸入status屬性查看,情況都差不多的。
4.上面的屬性既然沒錯,那么只好手動修改數據庫和數據庫表的屬性了。
1 alter database db_name character set utf82 3 alter table table_name character set utf8
改好之后,再次嘗試inset中文,發現依然是一串問號。這個時候已經基本無奈了,沒辦法,只好自己重新建了一個test數據庫和test數據庫表,并在建數據庫和建表時設置了默認編碼:
1 create database test character set utf8;2 use test;3 create table test(id int primary key, name varchar(20) not null) default charset=utf8;
這時,向測試代碼插入數據竟然成功了。所以至此我才發現,之前所有的改動基本是正確的,只有對數據庫和數據庫表的修改不知為什么沒有成功,還有待對mysql的深入研究吧。
最后,把數據庫和數據庫表全部drop掉,再重新建一遍,中文亂碼的問題得到解決。從hibernate向數據庫插數據也沒問題了。
5.命令行顯示中文可能會有些問題,因為windows命令行默認的是gbk編碼(可以右鍵->屬性查看到),所以我們還需要set names gbk來解決。但是,你如果用圖形界面觀察數據庫中的數據,是沒有問題的。
6.如果到最后實在找不到解決辦法:重裝。但是,要是你根本沒有嘗試過一些解決方案就急不可耐的重裝數據庫,只能說作為一個工程師你還欠缺的太多。因為我們需要的是一種培養自己動手解決問題的能力。實話說,重裝是最笨的解決辦法了。
所以,對網上那些動不動就喊著”重裝一遍不就好了“的人嗤之以鼻,因為你根本不是在指導別人解決問題。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com