在5.0版本中,可以用.txt文本的方式导入数据库,但是格式和数据库里建好的表结构吻合!
可是在我在导入的时候出现了乱码????????的问题.
文本可以导入,但汉字全是乱码.问?为什么?
表结构如下:
id INTEGER
name VARCHAR(10) gb2312
sex VARCHAR(10) gb2312文本的结果:
1 张小喊 男
2 张小喊 男
3 张小喊 男
..
.导入数据库就成了
1 ????? ??
2 ????? ??
就是这样了
给位想想办法!!\
谢谢!!
可是在我在导入的时候出现了乱码????????的问题.
文本可以导入,但汉字全是乱码.问?为什么?
表结构如下:
id INTEGER
name VARCHAR(10) gb2312
sex VARCHAR(10) gb2312文本的结果:
1 张小喊 男
2 张小喊 男
3 张小喊 男
..
.导入数据库就成了
1 ????? ??
2 ????? ??
就是这样了
给位想想办法!!\
谢谢!!
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
[mysql]default-character-set=gb2312
[mysqld]
default-character-set=gb2312然后重新启动MYSQL服务。进入数据库alter database charset = gb2312;还要记得在导入数据库的脚本的前面写上 set names gb2312;这样就OK了。
我安装的是mysql5.0.51a for win32,
操作系统是XP。
MySQL默认的字符编码为utf-8。
系统信息如下:
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.51a, for Win32 (ia32)Connection id: 21
Current database: cass
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.51a-community-nt MySQL Community Edition (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 2 hours 15 min 20 secThreads: 1 Questions: 79 Slow queries: 0 Opens: 21 Flush tables: 1 Open tables: 1 Queries per second avg: 0.010
--------------字符编码信息如下:
mysql> show variables like '%set%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| auto_increment_offset | 1 |
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | E:\cass\MySQL5\share\charsets\ |
+--------------------------+--------------------------------+
9 rows in set (0.00 sec)
操作过程:1、在DOS提示符下连接MySQL,进入之后建立数据库和数据表,操作过程如下:
mysql> drop database if exists cass;
mysql> create database cass DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> use cass;
mysql> create table sys_radi(ID int not null, bsbh int not null, bschar varchar(20) not null);2、然后把如下内容保存在D:盘根目录的文件中:
----数据内容开始,不包含本行----
1 1 一
2 1 丨
3 1 丿
4 1 丶
5 1 乙
6 1 乛
7 1
8 1 乚
9 2 二
10 2 十
----数据内容结束,不包含本行----
以上数据是在Windows中用记事本录入的,各列数据之间用tab键隔开,分别以UTF-8编码和ANSI编码保存成两个文件:
d:\datautf8.txt
d:\datagb.txt3、下面在mysql提示符下输入load data命令导入d:\datautf8.txt,然后检查结果:mysql> load data local infile "d:\\datautf8.txt" into table sys_radi LINES TERMINATED by '\r\n';
Query OK, 10 rows affected, 1 warning (0.02 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0mysql> select * from sys_radi;
+----+------+--------+
| ID | bsbh | bschar |
+----+------+--------+
| 0 | 1 | 涓€ |
| 2 | 1 | 涓? |
| 3 | 1 | 涓? |
| 4 | 1 | 涓? |
| 5 | 1 | 涔? |
| 6 | 1 | 涔? |
| 7 | 1 | 顮? |
| 8 | 1 | 涔? |
| 9 | 2 | 浜? |
| 10 | 2 | 鍗? |
+----+------+--------+
10 rows in set (0.00 sec)这次导入第1条记录的ID不正确,而且所有记录的第3个字段都是乱码。4、现在把所有记录删掉,重新用load data命令导入d:\datagb.txt,然后检查结果:mysql> delete from sys_radi;
Query OK, 10 rows affected (0.02 sec)mysql> load data local infile "d:\\datagb.txt" into table sys_radi LINES TERMINATED by '\r\n';
Query OK, 10 rows affected, 5 warnings (0.03 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0mysql> select * from sys_radi;
+----+------+--------+
| ID | bsbh | bschar |
+----+------+--------+
| 1 | 1 | 一 |
| 2 | 1 | 丨 |
| 3 | 1 | 丿 |
| 4 | 1 | 丶 |
| 5 | 1 | |
| 6 | 1 | |
| 7 | 1 | |
| 8 | 1 | |
| 9 | 2 | |
| 10 | 2 | 十 |
+----+------+--------+
10 rows in set (0.00 sec)这次导入,ID全对了,但是有一部分记录的第3个字段的数据丢了。
我究竟怎么样操作才能将数据正确导入?5、JSP页面读取测试忽略第4步,接第3步继续。
建立一个JSP页面,代码如下:
----页面代码开始,不包含本行----
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.lang.*, java.io.*, java.sql.*, java.util.* "%>
<html>
<body>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url="jdbc:mysql://localhost/cass";
Connection conn=DriverManager.getConnection(url,"root","dahuzi");
Statement stmt = conn.createStatement();
String sqlstr="select * from sys_radi";
ResultSet rs= stmt.executeQuery(sqlstr);while(rs.next()){
out.println(rs.getString(1));
out.println(" ");
out.println(rs.getString(2));
out.println(" ");
out.println(rs.getString(3));
out.println("<br>");
}
out.println("<br>");
out.print("恭喜~! 打开数据库操作成功!");
rs.close();
stmt.close();
conn.close();
%></body>
</html>
----页面代码结束,不包含本行----
以UTF-8格式保存页面文件为test_utf8.jsp,然后在浏览器地址栏输入:
http://localhost:8080/test/test_utf8.jsp
发现页面显示如下:
----页面显示开始,不包含本行----
0 1 一
2 1 丨
3 1 丿
4 1 丶
5 1 乙
6 1 乛
7 1
8 1 乚
9 2 二
10 2 十 恭喜~! 打开数据库操作成功!
----页面显示结束,不包含本行----
这样看来,MySQL客户端不能直接显示数据库中以UTF-8编码的字符串字段的汉字内容,所以会乱码。
在JSP页面中设置网页编码为UTF-8之后,就能正确显示数据库中以UTF-8编码的字符串字段的汉字内容了。
现在的问题在于:为什么第一行数据的第一个字段,即数值1,为什么导入数据库之后变成0了呢?
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)Connection id: 5
Current database: b2b
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.18-nt
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 1 hour 29 min 46 secThreads: 1 Questions: 6975 Slow queries: 0 Opens: 208 Flush tables: 1 Open
tables: 0 Queries per second avg: 1.295
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |