以下是数据库编码设定:
数据库
itresource | CREATE DATABASE `itresource` /*!40100 DEFAULT CHARACTER SET utf8
数据库 status
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
建表语句:
CREATE TABLE `i__news` (
`pk_i_newsid` int(10) NOT NULL AUTO_INCREMENT,
`v_ntitle` varchar(80) CHARACTER SET utf8 NOT NULL,
`v_nifrom` varchar(80) CHARACTER SET utf8 DEFAULT NULL,
`v_nputdate` varchar(13) CHARACTER SET utf8 NOT NULL,
`v_nauthor` varchar(20) CHARACTER SET utf8 NOT NULL,
`v_ninfo` mediumtext CHARACTER SET utf8 NOT NULL,
`v_nftype` int(2) NOT NULL,
`v_nfpath` varchar(80) CHARACTER SET utf8 DEFAULT NULL,
`v_orgname` varchar(80) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`pk_i_newsid`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8
所有的编码方式都是utf8的
以下是代码处理入库
public boolean newsAlter(String ntitle,String nifrom,String nputdate,String nauthor,String ninfo,int nftype,String nfpath,String orgname,String type){
boolean b = false;
dbcon = new DBConnection();
String sql = "";
if ("in".equals(type)) {
sql = "insert into i__news(v_ntitle,v_nifrom,v_nputdate,v_nauthor,v_ninfo,v_nftype,v_nfpath,v_orgname) values(?,?,?,?,?,?,?,?)";
try {
//byte[] cpic = ninfo.getBytes("latin1");
byte[] cpic = ninfo.getBytes("utf-8");
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss,"utf-8");
dbcon.prepareStatement(sql);
dbcon.setString(1, ntitle);
dbcon.setString(2, nifrom);
dbcon.setString(3, nputdate);
dbcon.setString(4, nauthor);
dbcon.setCharacterStream(5, bais, cpic.length);
dbcon.setInt(6, nftype);
dbcon.setString(7, nfpath);
dbcon.setString(8, orgname);
System.out.println(sql);
dbcon.executeUpdate();
b = true;
baisss.close();
bais.close();
dbcon.close();
} catch (Exception e) {
e.printStackTrace();
}
} else if (type.equals("up")) {
}
return b;
}
如果编码方式设为utf-8就报异常,如果设为latin1则正常插入,但是入库的中文都是乱码。其余的字段中文都是正常入库的。
急 求帮,哪位大虾遇到过?如何解决的?
7 个解决方案
#1
楼主分分真多。
#2
哎,可惜我也是才学mysql。
#3
看楼主的描述,就是 dbcon.setCharacterStream(5, bais, cpic.length); 插入的时候报错。
我copy了楼主的代码,在本地打印出System.out.println(bais.getEncoding());其编码是utf8
但楼主其他的字段没有转换编码格式,能顺利插入数据库,所以建议试试下面一段代码:
byte[] cpic = ninfo.getBytes("utf8");
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss);
就是去掉流里边的编码方式
这个也是猜测,楼主早日解决问题
我copy了楼主的代码,在本地打印出System.out.println(bais.getEncoding());其编码是utf8
但楼主其他的字段没有转换编码格式,能顺利插入数据库,所以建议试试下面一段代码:
byte[] cpic = ninfo.getBytes("utf8");
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss);
就是去掉流里边的编码方式
这个也是猜测,楼主早日解决问题
#4
如果编码方式设为utf-8就报异常,如果设为latin1则正常插入,但是入库的中文都是乱码。
你说的是 两个都设置成 “latin1”
还是只是这一句:byte[] cpic = ninfo.getBytes("latin1");
你说的是 两个都设置成 “latin1”
还是只是这一句:byte[] cpic = ninfo.getBytes("latin1");
#5
byte[] cpic = ninfo.getBytes(System.getProperty("sun.jnu.encoding"));
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss,"uft-8");
试试这个
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss,"uft-8");
试试这个
#6
修改数据库的编码或者是表的编码就可以解决啦
alter type(mysql)的命令,试试吧
alter type(mysql)的命令,试试吧
#7
我也出现了这样的问题,改编码方式,没有用
#1
楼主分分真多。
#2
哎,可惜我也是才学mysql。
#3
看楼主的描述,就是 dbcon.setCharacterStream(5, bais, cpic.length); 插入的时候报错。
我copy了楼主的代码,在本地打印出System.out.println(bais.getEncoding());其编码是utf8
但楼主其他的字段没有转换编码格式,能顺利插入数据库,所以建议试试下面一段代码:
byte[] cpic = ninfo.getBytes("utf8");
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss);
就是去掉流里边的编码方式
这个也是猜测,楼主早日解决问题
我copy了楼主的代码,在本地打印出System.out.println(bais.getEncoding());其编码是utf8
但楼主其他的字段没有转换编码格式,能顺利插入数据库,所以建议试试下面一段代码:
byte[] cpic = ninfo.getBytes("utf8");
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss);
就是去掉流里边的编码方式
这个也是猜测,楼主早日解决问题
#4
如果编码方式设为utf-8就报异常,如果设为latin1则正常插入,但是入库的中文都是乱码。
你说的是 两个都设置成 “latin1”
还是只是这一句:byte[] cpic = ninfo.getBytes("latin1");
你说的是 两个都设置成 “latin1”
还是只是这一句:byte[] cpic = ninfo.getBytes("latin1");
#5
byte[] cpic = ninfo.getBytes(System.getProperty("sun.jnu.encoding"));
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss,"uft-8");
试试这个
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic);
InputStreamReader bais = new InputStreamReader(baisss,"uft-8");
试试这个
#6
修改数据库的编码或者是表的编码就可以解决啦
alter type(mysql)的命令,试试吧
alter type(mysql)的命令,试试吧
#7
我也出现了这样的问题,改编码方式,没有用