解決mysql資料庫在web開發中的亂碼問題

來源:互聯網
上載者:User

標籤:資料庫系統   指定   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&amp;characterEncoding=UTF-8&amp";

&amp;是&的轉義符。

六、在編寫應用程式中,其它需要注意編碼的地方:

比如: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開發中的亂碼問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.