MySQL数据库中文读写问题

     这两天写论文搭建运行环境,数据库用的MySQL,但是中文问题让我郁闷了一会,不断地百度,终于试验成功了。
     MySQL默认的字符集是latin1,也就是ISO-8859,若要读写中文,需要设定为utf8格式。

【错误复现】
1.建立数据库和表:
新建库testdb:
1   mysql> create database testdb;
2mysql> use testdb;
3Database changed
建表:
1mysql> create table tbl_user (name varchar(20));
2Query OK, 0 rows affected (0.14 sec)
写中文时出现如下错误:
1mysql> insert into tbl_user values ('');
2ERROR 1366 (HY000): Incorrect string value: '\xBA\xEE' for column 'name' at row 1
2.查看系统字符集
mysql> show variables;
1 character_set_client                  | utf8
2 character_set_connection        | utf8
3 character_set_database            | utf8
4 character_set_filesystem          | binary
5 character_set_results                | utf8
6 character_set_server                 | utf8
7 character_set_system               | utf8
此时系统是utf8的字符集,因为我在安装mysql数据库时指定了字符集是utf8。
虽然数据库字符集已经是utf8了,但是无法往表中写中文,写入后成了乱码,读出的也是乱码。
3.用Java Bean读取数据库
1java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/cr_db","root","123456");
没有指定读取的字符方式useUnicode=true&characterEncoding=utf-8
此时,用java bean读出的是乱码。
4.JSP页面读写中文也是乱码,jsp页面编码为gb2312:
1<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
2
页面保持格式为普通的ANSI

【解决办法】
1.设定表的names为gbk字符
1mysql> set names 'gbk';
2Query OK, 0 rows affected (0.00 sec)
2.系统字符集查看(保持utf8不变)
mysql> show variables;
1 character_set_client                  | utf8
2 character_set_connection        | utf8
3 character_set_database            | utf8
4 character_set_filesystem          | binary
5 character_set_results                | utf8
6 character_set_server                 | utf8
7 character_set_system               | utf8
3.Java Bean连接数据库方式修改为utf8:
1java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/cr_db?useUnicode=true&characterEncoding=utf-8","root","123456");
4.JSP页面中保持gb2312不变,但是在jsp页面中获取的界面输入要转化一下字符编码:
 1<%!
 2public String convertCharSet(String str)
        

 3    try
 4  {
 5   
 6        String temp_p=str; 
 7        byte[] temp_t=temp_p.getBytes("ISO8859-1"); 
 8        String temp=new String(temp_t); 
 9        return temp;
10    }
catch(Exception e)
11 {
12        e.printStackTrace();    
13    }

14    return null;
15}

16%>
写库时先转化再执行sql命令:
1sqlStr=convertCharSet(sqlStr);
2sqlBean.executeUpdate(sqlStr);


【效果】
1.直接命令行下读写中文:
 1mysql> insert into tbl_user values('');
 2Query OK, 1 row affected (0.08 sec)
 3mysql> select * from tbl_user;
 4+-------+
 5| name  |
 6+-------+
 7| houcy |
 8| 侯        |
 9+-------+
102 rows in set (0.03 sec)

2.用Java Bean读写中文也能成功!

哈哈,已经成功写入中文啦!o(∩_∩)o...

【总结】
1.数据库字符集需设定为utf8格式
可以在安装mysql时指定,也可以在建立数据库时指定整个库的字符集:
如:

1CREATE DATABASE cr_db  DEFAULT CHARACTER SET utf8 default collate utf8_general_ci;

这样整个cr_db库中的每个均是utf8字符集了。
2.设定names为gbk
3.连接数据库时指定连接方式useUnicode=true&characterEncoding=utf-8





posted on 2008-04-21 23:54 挑灯看剑 阅读(898) 评论(1)  编辑 收藏 引用 所属分类: 工作随笔

评论

# re: MySQL数据库中文读写问题 2009-05-17 16:16 dzgx6868

好  回复  更多评论   

只有注册用户登录后才能发表评论。
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

公告

【自我介绍】 08年南开大学硕士毕业 最近关注:算法、Linux、c++、高并发 爱好:滑旱冰、打乒乓球、台球、保龄球

常用链接

随笔分类(139)

文章分类

我常去的网站

技术博客(都是大牛)

技术站点

搜索

积分与排名