數據庫CRUD中的中文編碼問題

幾天前的拼命coding碰到了不少問題,其中一個就是中國特點程序猿問題——中文編碼亂碼。mysql

當我把寫好的DAO模塊測試CURD時,數據庫執行正常,可是全部的字段中的中文所有亂碼。我嘗試了修改eclipse項目默認編碼爲UTF-8,嘗試設置數據庫的表的編碼git

alter table type character set utf8;

都無濟於事。sql

本身曾經遇到過這種狀況,可是沒有整理過,到了用的時候,眉頭一皺,計就是不上來。數據庫

折騰了半個鐘頭,終於找到了解決辦法:eclipse

這裏就忘了剛纔的囧吧,咳咳,加入咱們剛剛開始創建數據庫表:測試

咱們應該這麼作:編碼

CREATE TABLE jingdian(id INT PRIMARY KEY AUTO_INCREMENT,  businessId INT, businessName VARCHAR(200), city VARCHAR(100), longitude DOUBLE, latitude DOUBLE, hashCode VARCHAR(200) ) default charset = utf8;

就是在建立表的末尾加入默認字符集的定義:可是爲何以前修改表字符集操做時沒能成功,讓人有點費解。我猜想的緣由是以前數據庫的編碼默認爲別的類型,當我存入utf-8編碼的數據時它被認爲是MYSQL的默認編碼數據而被錯誤解碼,出現亂碼,而我修改表的字符編碼時,這時候MYSQL又將這些原本就亂了的字符按照某種編碼轉換方法以MYSQL原默認編碼向UTF-8轉換,錯上加錯。具體緣由還有待考察,這裏只是個人推測。url

而後數據庫的訪問url也須要指定參數,這是我平時沒注意的方式,不須要牽涉具體的數據庫交互組件的使用。具備至關的通用性,這裏推薦給你們:
code

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8 
username=root
password=

我查看了其餘人的博客,彷佛還有其餘的解決辦法,這裏我找了幾條比較清楚的:ip

1.  SET NAMES 'utf8'; 

它至關於下面的三句指令: 

SET character_set_client = utf8; 
SET character_set_results = utf8; 
SET character_set_connection = utf8;


2. 建立數據庫 

mysql> create database name character set utf8;


3. 建立表

CREATE TABLE `type` ( 
`id` int(10) unsigned NOT NULL auto_increment, 
`flag_deleted` enum('Y','N') character set utf8 NOT NULL default 'N', 
`flag_type` int(5) NOT NULL default '0', 
`type_name` varchar(50) character set utf8 NOT NULL default '', 
PRIMARY KEY (`id`) 
)  DEFAULT CHARSET=utf8;


4. 修改數據庫成utf8的.

mysql> alter database name character set utf8;


5. 修改表默認用utf8.

mysql> alter table type character set utf8;


6. 修改字段用utf8

mysql> alter table type modify type_name varchar(50) CHARACTER SET utf8;
相關文章
相關標籤/搜索