解决mysql数据库在web开发中的乱码问题

首先,出现的乱码的原因在于编码方式不统一,主要是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乱码问题就可以解决了。

原文地址:https://www.cnblogs.com/microsoftjava/p/6861608.html