oracle数据库字符集为ZHS16GBK插入的韩文日文俄文变成问号
最近项目中解析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插入的韩文日文俄文变成问号相关推荐
- oracle导出字符集ZHS16GBK,ORACLE11g数据库字符集从ZHS16GBK转为UTF8
数据库字符集直接查看方法: select * fromnls_database_parameters; select * fromv$nls_parameters; 找到 NLS_LANGUAGE_N ...
- oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集
转自:https://www.cnblogs.com/perilla/p/3873653.html 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的 ...
- 理解ORACLE数据库字符集
一.引言 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化 ...
- oracle繁体字筛选,Oracle数据库字符集浅析
作者:IT168 谭怀远 2009-04-07 [IT168技术文档] 作为dba,在维护一个应用系统时,也许会遇到这样的问题,用户会抱怨在通过界面查询数据库中的数据时,显示出来的却是乱码,于是怀疑 ...
- Oracle 修改字符集 为ZHS16GBK
Oracle 修改字符集 为ZHS16GBK 相信很多人都会遇到安装oracle后字符集编码不一致而导致的各种问题,现在讲下如何修改字符集格式. 一.oracle server 端 字符集查询 sel ...
- ORACLE数据库字符集
ORACLE数据库字符集 一.字符集基本知识 二.查询oracle server端的字符集 三.修改oracle的字符集 字符集基本知识 1.基本认知 ORACLE数据库字符集,即Oracle全球化支 ...
- oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三
背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...
- [Oracle数据库] oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三
背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...
- oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列四
背景 数据库字符集涉及的概念与知识非常多,本文继续学习:相关文章链接见下: oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三 http:// ...
最新文章
- LeetCode简单题之拆炸弹
- 生产环境项目问题记录系列(一):一次循环数据库拖垮服务器问题
- Request对象的主要方法有哪些?
- 湖南加速恢复,“望城速度”强势打样
- boost::random模块实现如何使用随机数库的简短演示程序
- [BUUCTF-pwn]——bjdctf_2020_router
- Android 创建,删除,检测桌面快捷方式
- 吐血推荐 | 那些提升开发人员工作效率的在线工具
- 500 cannot be cast to javax.xml.registry.infomodel
- 一步一步写算法(之 最大公约数、最小公倍数)
- 家庭局域网_KODI超强的局域网视频播放软件
- orange软件:预测模型:逻辑回归
- 学习了金字塔原理中的SCQA分析法
- UESTC-1633 去年春恨却来时,落花人独立,微雨燕双飞(取模最短路)
- 读书笔记-干法-付出不亚于任何人的努力!
- 关于苹果开发证书、发布证书、开发推送证书、发布推送证书的申请
- 收藏 一句话问答 linux
- 80psi等于多少kpa_kpa与psi的换算(kpa与psi对照表)
- 我为什么选择鲸交所WhaleEx?
- 随机密码生成Python
热门文章
- 苹果ID不能登陆:The action could not be completed. Try again
- RT-Thread:让W25Q128、U盘、SD卡同时搭载文件系统
- 《Deep Learning Techniques for Music Generation – A Survey》深度学习用于音乐生成——书籍阅读笔记(一)Chapter 1
- 第6讲:SQL语句之DQL类型的数据查询语言
- 背包问题进阶优雅总结【二维费用+分组+有依赖】
- 笨蛋去括号法求空集的幂集P(∅)和空集的幂集的幂集P({∅})和空集的幂集的幂集P(P({∅}))
- SpringCloud微服务架构标准版本拓扑图
- 皇室战争android换到苹果嘛,皇室战争怎么切换账号 苹果端和安卓端切换账号方法介绍...
- Golang实现发送微信公众号模板消息(每日一句和天气预报)
- oracle云简介,Oracle 商务智能云服务器功能简介