標籤:資料庫系統 指定 new 資料 win har 操作 建立 資料庫表
首先,出現的亂碼的原因在於編碼方式不統一,主要是mysql資料庫的編碼方式和web項目的編碼方式,只有遵循了編碼方式統一的原則,才能避免產生亂碼問題。
通常項目中使用的都是UTF-8編碼,因此,我們在建立資料庫時,要設定預設編碼方式為UTF-8,具體步驟如下:
一、Windows環境下的mysql配置:
進入mysql安裝目錄,找到my.ini或者是my-default.ini檔案,在[mysqld]和[client]後面增加"default-character-set=utf8",設定mysql預設編碼為utf8:
設定後記住重啟mysql服務。
二、更改了資料庫系統編碼後,還需注意資料庫編碼,使用create database 建立資料庫時,要在後面加上character set utf8 collate utf8_general_ci:
create database mydb1 character set utf8 collate utf8_general_ci;
collate utf8_general_ci是指定該資料庫的校對規則。
三、建立資料庫表時,添加default charset utf8:
create table mytb1
(id varchar(20) primary key,
name varchar(40) not null)
default charset utf8;
這樣,新表的編碼就是UTF-8了。
四、應用程式的編碼:
以jsp頁面為例:
<%@ page contentType="text/html; charset=UTF-8" %>
五、應用系統與資料庫系統串連的編碼:
以JDBC為例,在編寫用於串連的url時,需加上相應參數:
String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&";
&是&的轉義符。
六、在編寫應用程式中,其它需要注意編碼的地方:
比如:servlet中,
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String value = request.getParameter("name");
value = new String(value.getBytes("ISO8859-1"),request.getCharacterEncoding());
另外,在項目建立起來後,發現的mysql亂碼問題,有時很可能需要修改資料庫的編碼方式,除上述幾個涉及到mysql的修改方式外,還需以下幾個操作:
一、部分資料表的列編碼需要修改:
使用show create table tb2時,可以看到有可能修改了資料庫、資料庫表的編碼方式,但列的編碼方式沒有修改為utf8:
因此,需要單獨修改:
alter table mytb2 change username username varchar(40) character set utf8;
二、依次將編碼不正確的列進行修改,當修改具有外鍵約束的列時,又會出現新的問題,mysql系統不允許修改,並拋出錯誤。
因此,必須將具有外鍵約束的表解除約束,再進行修改,之後再重新添加約束:
alter table mytb2 drop foreign key foreignKeyName;
alter table mytb2 change foreignKeyName foreignKeyName varchar(40) character set utf8;
alter table mytb2 add constraint FK_foreignKeyName foreign key(foreignKeyName) references mytb1(column_name);
經過了上面的所有操作後,mysql亂碼問題就可以解決了。
解決mysql資料庫在web開發中的亂碼問題