oracle数据库字符集是个让人头疼的问题,特别是一些客户使用的是英文字符集数据库,但客户端显示的字符集倒是中文的,因为历史的缘由,致使字符集不能改。因此只能由查询、插入中文问题的服务程序更改了(我以为这个处理很不优雅,但目前只想到这招)。java
select * from nls_database_parameters;//查看数据库字符集
复制代码
能够看出字符集不一致。致使web服务入参查询、插入时会出现乱码。web
若是不肯定时,能够写个简单的插入接口,以不一样字符格式插入数据,相似下面:sql
switch (type){
case 0:
System.out.println("default 0:");
vName = new String(name.getBytes());
break;
case 1:
System.out.println("1-utf8:");
try {
vName = new String(name.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
case 2:
System.out.println("2-gbk:");
try {
vName = new String(name.getBytes("gbk"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
case 3:
System.out.println("3-iso-8859-1:");
try {
vName = new String(name.getBytes("iso-8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
case 4:
System.out.println("4-gbk-to-iso8859:");
try {
vName = new String(name.getBytes("gbk"),"iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
case 5:
System.out.println("5-utf8-to-iso8859:");
try {
vName = new String(name.getBytes("utf-8"), "iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
case 6:
System.out.println("6-default-to-iso8859:");
try {
vName = new String(name.getBytes(), "iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
case 7:
System.out.println("7-iso8859-to-gbk:");
try {
vName = new String(name.getBytes("iso-8859-1"), "gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
}
复制代码
这样可能在当前服务器查看参数还是乱码,但切换到和服务器字符集的服务器登录此数据库,就能够看到是正确的中文了。 数据库
咱们能够发现type-6是以正常中文插入。也就是对应的服务器
new String(name.getBytes(), "iso-8859-1");
复制代码
String vName = new String(name.getBytes(), "iso-8859-1");
...//vName进行下一步查询、插入
复制代码