最近项目中解析xml存在中文俄文日文韩文等等乱七八槽的外文,在插入数据库中会乱码变成问号。

原因:是oracle安装的数据库的时候字符集不一样( select userenv('language') from dual可以查看),SIMPLIFIED CHINESE_CHINA.ZHS16GBK这种会变成问号,而SIMPLIFIED CHINESE_CHINA.AL32UTF8这种字符集却可以正常保存。

尝试了网上的一些修改环境变量NLS_LANG,以及用nvchar的oracle数据类型却都不行,存到数据库都乱码。最后就只能通过将外文内容转成十六进制的字节码,最后读取查询的时候再将字节码转成原来的内容就行。

public class Test {// 字符串转换unicodepublic static String string2Unicode(String string) {StringBuffer unicode = new StringBuffer();for (int i = 0; i < string.length(); i++) {// 取出每一个字符char c = string.charAt(i);// 转换为unicodeunicode.append("\\u" + Integer.toHexString(c));}return unicode.toString();}// unicode 转字符串public static String unicode2String(String unicode) {StringBuffer string = new StringBuffer();String[] hex = unicode.split("\\\\u");for (int i = 1; i < hex.length; i++) {// 转换出每一个代码点int data = Integer.parseInt(hex[i], 16);// 追加成stringstring.append((char) data);}return string.toString();}public static String convert(String str){str = (str == null ? "" : str);String tmp;StringBuffer sb = new StringBuffer(1000);char c;int i, j;sb.setLength(0);for (i = 0; i < str.length(); i++){c = str.charAt(i);sb.append("\\u");j = (c >>>8); //取出高8位tmp = Integer.toHexString(j);if (tmp.length() == 1)sb.append("0");sb.append(tmp);j = (c & 0xFF); //取出低8位tmp = Integer.toHexString(j);if (tmp.length() == 1)sb.append("0");sb.append(tmp);}return (new String(sb));}public static void main(String[] args) {String str = "???";System.out.println(convert(str));System.out.println(string2Unicode(str));System.out.println(unicode2String(convert(str)));System.out.println(unicode2String(string2Unicode(str)));}}
// \ub9ac\uad11\uadfc 输出结果
// \ub9ac\uad11\uadfc
// 리광근
// 리광근

但是我们项目这边用的是JS查询,封装的内部框架,不是去请求Java,所以需要用SQL的函数Function实现oracle函数unistr将Oracle数据库中的Unicode转换为原文

CREATE OR REPLACE FUNCTION UnicodeToString(v_unicode_str varchar2)
RETURN nvarchar2 ASv_str  nvarchar2(1000) :='';BEGINbeginselect unistr(REPLACE(v_unicode_str,'\u','\')) into v_str from dual ;exceptionwhen others thenv_str := '';end;RETURN v_str;
END UnicodeToString;

函数Function说明:
create or replace function 函数名(参数)

return    返回值类型    as    
定义变量
begin    函数主体    end

函数Function调用:(sql语句,instr判断有没有包含\u)

(casewhen instr(internationalname, '\u') = 1 thenUnicodeToString(internationalname)elseinternationalname
end) as internationalname

oracle数据库字符集为ZHS16GBK插入的韩文日文俄文变成问号相关推荐

  1. oracle导出字符集ZHS16GBK,ORACLE11g数据库字符集从ZHS16GBK转为UTF8

    数据库字符集直接查看方法: select * fromnls_database_parameters; select * fromv$nls_parameters; 找到 NLS_LANGUAGE_N ...

  2. oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集

    转自:https://www.cnblogs.com/perilla/p/3873653.html 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的 ...

  3. 理解ORACLE数据库字符集

    一.引言     ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化 ...

  4. oracle繁体字筛选,Oracle数据库字符集浅析

    作者:IT168 谭怀远  2009-04-07 [IT168技术文档] 作为dba,在维护一个应用系统时,也许会遇到这样的问题,用户会抱怨在通过界面查询数据库中的数据时,显示出来的却是乱码,于是怀疑 ...

  5. Oracle 修改字符集 为ZHS16GBK

    Oracle 修改字符集 为ZHS16GBK 相信很多人都会遇到安装oracle后字符集编码不一致而导致的各种问题,现在讲下如何修改字符集格式. 一.oracle server 端 字符集查询 sel ...

  6. ORACLE数据库字符集

    ORACLE数据库字符集 一.字符集基本知识 二.查询oracle server端的字符集 三.修改oracle的字符集 字符集基本知识 1.基本认知 ORACLE数据库字符集,即Oracle全球化支 ...

  7. oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三

    背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...

  8. [Oracle数据库] oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三

    背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...

  9. oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列四

    背景 数据库字符集涉及的概念与知识非常多,本文继续学习:相关文章链接见下: oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三    http:// ...

最新文章

  1. LeetCode简单题之拆炸弹
  2. 生产环境项目问题记录系列(一):一次循环数据库拖垮服务器问题
  3. Request对象的主要方法有哪些?
  4. 湖南加速恢复,“望城速度”强势打样
  5. boost::random模块实现如何使用随机数库的简短演示程序
  6. [BUUCTF-pwn]——bjdctf_2020_router
  7. Android 创建,删除,检测桌面快捷方式
  8. 吐血推荐 | 那些提升开发人员工作效率的在线工具
  9. 500 cannot be cast to javax.xml.registry.infomodel
  10. 一步一步写算法(之 最大公约数、最小公倍数)
  11. 家庭局域网_KODI超强的局域网视频播放软件
  12. orange软件:预测模型:逻辑回归
  13. 学习了金字塔原理中的SCQA分析法
  14. UESTC-1633 去年春恨却来时,落花人独立,微雨燕双飞(取模最短路)
  15. 读书笔记-干法-付出不亚于任何人的努力!
  16. 关于苹果开发证书、发布证书、开发推送证书、发布推送证书的申请
  17. 收藏 一句话问答 linux
  18. 80psi等于多少kpa_kpa与psi的换算(kpa与psi对照表)
  19. 我为什么选择鲸交所WhaleEx?
  20. 随机密码生成Python

热门文章

  1. 苹果ID不能登陆:The action could not be completed. Try again
  2. RT-Thread:让W25Q128、U盘、SD卡同时搭载文件系统
  3. 《Deep Learning Techniques for Music Generation – A Survey》深度学习用于音乐生成——书籍阅读笔记(一)Chapter 1
  4. 第6讲:SQL语句之DQL类型的数据查询语言
  5. 背包问题进阶优雅总结【二维费用+分组+有依赖】
  6. 笨蛋去括号法求空集的幂集P(∅)和空集的幂集的幂集P({∅})和空集的幂集的幂集P(P({∅}))
  7. SpringCloud微服务架构标准版本拓扑图
  8. 皇室战争android换到苹果嘛,皇室战争怎么切换账号 苹果端和安卓端切换账号方法介绍...
  9. Golang实现发送微信公众号模板消息(每日一句和天气预报)
  10. oracle云简介,Oracle 商务智能云服务器功能简介