java编码字符集及jdbc连接数据库指定字符集
2012-03-2417:11:12|分类:java|标签:|字号大中小订阅
java中String的编码格式为unicode,如果要将中文插入mysql,则表中字符列的编码属性应该设为utf-8.
create table seugs(
number int(11)default NULL,
name nchar(10)default NULL,
sex nchar(4)default NULL,
home nchar(100)default NULL,
college nchar(50)default NULL,
benke nchar(50)default NULL,
birth date default NULL,
rxtime date default NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8。
在java连接mysql时,连接语句可设置字符集,语法如下,注意表名跟属性设置之间用问号连接
conn=
DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding= utf8","root","syq");
如果使用命令行或者IDE工具直接执行SQL语句,如果查询条件里有中文,则还应该设置MYSQL 的字符编码。原因如下:
MySQL处理连接时,外部连接发送过来的SQL请求会根据以下顺序进行转换:
character_set_client//客户连接所采用的字符集
|
character_set_connection//MySQL连接字符集
|
character_set_database//数据库所采用的字符集(表,列)
|
character_set_results//客户机显示所采用的字符集
一.产生乱码的根本原因在于:
1.客户机没有正确地设置client字符集,导致原先的SQL语句被转换成connection所指字符集,而这
种转换,是会丢失信息的,如果client是utf8格式,那么如果转换成gb2312格式,这其中必定会丢
失信息,反之则不会丢失。一定要保证connection的字符集大于client字符集才能保证转换不丢失信息。
2.数据库字体没有设置正确,如果数据库字体设置不正确,那么connection字符集转换成database
字符集照样丢失编码,原因跟上面一样。