mysql5.0+mysql-connector-java-3.1.12+jdk1.5.0
数据库编码为utf8import java.sql.*;
public class mysql{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=qazwsx");
PreparedStatement ps=cn.prepareStatement("insert t values(?)");
ps.setString(1,"中文工团");
ps.executeUpdate();
ps.close();
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery("select * from t");
rs.first();
while(rs.next())
System.out.println(rs.getString(1));
rs.close();
st.close();
cn.close();}catch(Exception e){e.printStackTrace();}
System.out.println("ok");
}
}
用以上代码,可得到正确的结果.
-----------------
C:\xx>java mysql
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
ok
-----------------------
但在mysql中确看到了乱码,怎么解决?mysql> select * from t ;
+--------------+
| col |
+--------------+
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
+--------------+
10 rows in set (0.00 sec)
数据库编码为utf8import java.sql.*;
public class mysql{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=qazwsx");
PreparedStatement ps=cn.prepareStatement("insert t values(?)");
ps.setString(1,"中文工团");
ps.executeUpdate();
ps.close();
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery("select * from t");
rs.first();
while(rs.next())
System.out.println(rs.getString(1));
rs.close();
st.close();
cn.close();}catch(Exception e){e.printStackTrace();}
System.out.println("ok");
}
}
用以上代码,可得到正确的结果.
-----------------
C:\xx>java mysql
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
ok
-----------------------
但在mysql中确看到了乱码,怎么解决?mysql> select * from t ;
+--------------+
| col |
+--------------+
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
| 涓枃宸ュ洟 |
+--------------+
10 rows in set (0.00 sec)
解决方案 »
- 一个数据库的问题.明明是一对多的,插入数据就是一对一
- 怎么将存储在文本文档中的像素值转换成RGB图
- 本人学习第一个JAVA程序出错,麻烦大虾帮我看看那错了
- 有没有免费使用的安装包制作工具啊
- 急,如何让JPanel随着中用Graphics2D的scale方法自动缩放,同时让滚动条自动变化
- 关于java socket编程客户端实现的问题,请好心人帮忙
- 关于ResourceBundle读取properties文件的一个问题
- 解决问题者,给100分
- 如何在JAVA中调用已存在C++类库中的函数?
- Netty5接收TCP数据分包问题
- 为什么我在Applet中生成一个Frame类型的窗口,窗口底部总带有Java Applet Window字样,能否去掉
- 非常急的问题
{
if(s==null){
s="";
}
try
{
byte[] b=s.getBytes("ISO-8859-1");
s=new String(b);}
catch(Exception e)
{
s="";
}
return s;
}
然后加上这个方法了.
while(rs.next())
{
String ss=rs.getString(1);
out.print(ss);
}
byte[] b=s.getBytes("GBK");
s=new String(b,"ISO-8859-1");
这里的s存到数据库就不是乱码从数据库中取出使用
String s=rs.getString(1);
byte[] b=s.getBytes(,"ISO-8859-1");
s=new String(b,"GBK");
这里的s从数据库里取出正常的中文,就不是乱码
linuxman | 2004年12月24日, 19:26 1 在my.cf文件的[mysqld]段设置:
default-character-set=utf8 2 单独设置某个数据库:
alter database testdb character set utf8; 查看mysql支持的编码:
show character set; 解决PHP存取MySQL 4.1乱码问题
linuxcrazy | 2005年01月18日, 15:05 解决PHP存取MySQL 4.1乱码问题
从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章"Character Set Support"后终于找到了解决方法并测试通过。 MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。 查看系统的字符集和排序方式的设定可以通过下面的两条命令: mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec) 上面列出的值就是系统的默认值。(很奇怪系统怎么默认是latin1的瑞典语排序方式)... 当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句: SET NAMES 'utf8'; 它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8; 再试试看,正常了吧?^_^ Enjoy!