以MYSQL为数据库的程序中的乱码问题
本人是初学者很多知识的总结还不完善,但是为了个人学习,所以进行了总结。有什么不对的请大家指教!
一、两种查看MYSQL编码的方式:
1.status
可以查看MYSQL对数据库默认的字符编码,use 某个数据库后,则显示这个数据库的编码
2. show variables like 'character\_set\_%';
可以查看更详细的信息:
character_set_server:设置服务器使用的字符集
character_set_client :设置客户端发送查询使用的字符集
character_set_connection :设置服务器需要将收到的查询串转换成的字符集
character_set_results :设置服务器要将结果数据转换到的字符集,转换后才发送给客户端
二、如何比较有效的避免乱码?
注意:要避免乱码,就要全面的进行预防,从MYSQL数据库的默认编码、命令操作的地方、建数据库设置、建表设置、程序设置。
1.在安装MYSQL数据库的时候不要一下子默认到底,要特别留心使用的字符编码,将其设置为UTF8(这个传说在实际中比GBK用的要多),省得以后麻烦。
2.可以在终端写create database aubergine character set utf8;建立数据库,但是,不建议在终端建表,尤其是向表中insert数据,因为从终端插入的数据和系统平台的编码有关,容易产生乱码。所以,1>传说程序员有个习惯,在向数据库插入数据的时候,是将建表、插入语句写入.sql文件中,然后在MYSQL的终端建立好数据库后source一下这个.sql文件;
那么,还有一种方法,2>使用MyEclipse开发的,可以在MyEclipse中建立数据库连接后,建立一个SQL EDITOR,将建表、插入语句写进去,点击绿色的三角运行。
3.剩下的就是写法上注意的了:----插入数据
1>打开MYSQL的终端,建立数据库,使用source命令往数据库中建表并插入数据
create database aubergine default character set utf8;
use aubergine;
set names utf8;
source E:/aubergine.sql;
注意:查了一下资料说set names utf8;相当于下面的三条命令:
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_results=utf8;
aubergine.sql中如何写来达到对表的字符编码的设置呢?
DROP TABLE IF EXISTS kang;
CREATE TABLE kang (
id int(12) NOT NULL auto_increment,
order_id int(10) unsigned NOT NULL,
product_id int(10) unsigned NOT NULL,
dang_price double NOT NULL,
product_num int(10) unsigned NOT NULL default '1',
amount double NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
设置数据库存储引擎默认的的数据库字符编码是utf8,这个就是对表进行的字符编码设置。
注:如果使用的MyEclipse中的DB Browser来插入数据,那么在写url的时候要写作:
jdbc:mysql://localhost:3306/aubergine?characterEncoding=utf8
4.程序中的写法注意:
1>Jdbc连接数据库的时候在指定url的时候标注(由于是mysql数据库所以utf和8之间没有横杠)
String url="jdbc:mysql://localhost:3306/auber?characterEncoding=gbk";
(如果使用utf-8编码 String url="jdbc:mysql://localhost:3306/auber?characterEncoding=utf8";)
2> request.setCharacterEncoding(“utf-8”)----------------------》可以使用过滤器来实现
3> <meta http-equiv="content-type" content="text/html;charset=gbk">
meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中。
4> response.setContentType( "text/html;charset=UTF-8 ");//jsp代码处写的
5> <%@ page contentType="text/html;charset=GB2312" pageEncoding="GB2312"%>//在jsp文件的头部写的
6>有时候method=”post”没错,可能get有错则:更改tomcat---àconfig--àserver.xml里面的编码(URLEncoder是个很好用的)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
urlencoding="utf-8"/>
补充:如果在安装MYSQL数据库的时候就是默认的Latin文怎么办?
在mysql安装后的目录中找到my.ini文件,然后把里面的default-character-set=LATIAN改成default-character-set=GBK 或者是UTF-8。
这个在你的电脑上存在其他项目的时候不建议使用,因为更改这个会影响到其他项目的编码。