背景

2022-04-28,由于数据库存的都是简体数据,但是资料导出需要繁体,要给别人看。所以只好自己探索一下,至于为什么不用代码,就是想试试数据库,实在不行,我就回去用代码写。

准备工作

  • 数据库Oracle 12
  • 操作数据库的工具Dbeaver

参考文章

Oracle Convert()函数_w3cschool
求助数据的简繁转换(convert的深入问题) - Oracle开发 - ITPUB论坛-专业的IT技术社区
Oracle中文简繁体转换函数_入秋枫叶的博客-CSDN博客_oracle繁体转简体函数
Oracle中执行存储过程call和exec区别_master_yao的博客-CSDN博客_oracle调用存储过程语句同一个函数不一样的用法---Convert()_Noob_get_a_dream的博客-CSDN博客Oracle中执行存储过程call和exec区别_master_yao的博客-CSDN博客_oracle调用存储过程语句

思路

  1. 字符集是什么(SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET'; 这个语句可以查看字符集,但我不确定字符集的来源是哪,可能的来源有三个:我电脑的操作系统;部署Oracle服务器的操作系统;Oracle自带)。
  2. Convert函数的使用
  3. 写一个Procedure(SP)或者函数来测试一下转换的结果,因为查到的字符集很多,一个个试未免太难了。测试结果你可以选择打印输出,也可以建表存储。我是建表的。
  4. 执行Sp CALL KILLENTEST();

实践

这下面是我的理解,我没有求证,你们可以再多找找资料。

  1. SELECT CONVERT ('中国', 'ZHT16MSWIN950') FROM dual; --(string,dest_char)
  2. SELECT CONVERT ('中国', 'ZHT16MSWIN950','ZHS16GBK') FROM dual; --(string,char,char2)

CREATE OR REPLACE PROCEDURE KILLENTEST
IScn_text varchar(100);
LANGUAGE_char varchar(100);
ctn_text varchar(100) ;BEGINDELETE KILLEN_TEST;FOR x IN (SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET' )LOOP cn_text:='中国';LANGUAGE_char :=x.value;INSERT INTO KILLEN_TEST(COLUMN1,COLUMN2,COLUMN3,COLUMN4)SELECT cn_text ,LANGUAGE_char, CONVERT (cn_text, LANGUAGE_char),'CONVERT(string,dest_LANGUAGE_char)' FROM dual;--1. SELECT cn_text ,LANGUAGE_char, CONVERT (cn_text, LANGUAGE_char),'CONVERT(string,dest_LANGUAGE_char)' FROM dual;END LOOP;
END KILLENTEST;

CREATE OR REPLACE PROCEDURE KILLENTEST
IScn_text varchar(100);
LANGUAGE_char varchar(100);
LANGUAGE_char2 varchar(100);
ctn_text varchar(100) ;BEGINDELETE KILLEN_TEST;FOR x IN (SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET' AND value LIKE 'ZH%' )LOOP cn_text:='中国';LANGUAGE_char :=x.value; IF LANGUAGE_char LIKE 'US%' thenCONTINUE;END IF;--      INSERT INTO KILLEN_TEST(COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,TEST_KEY)
--      SELECT cn_text ,LANGUAGE_char,'', CONVERT (cn_text, LANGUAGE_char),'CONVERT(string,dest_LANGUAGE_char)','1' FROM dual;FOR y IN (SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET' AND value LIKE 'ZH%')          LOOPLANGUAGE_char2 :=y.value;IF LANGUAGE_char2 LIKE 'JA%' OR LANGUAGE_char=LANGUAGE_char2  thenCONTINUE;END IF;INSERT INTO KILLEN_TEST(COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,TEST_KEY)SELECT cn_text ,LANGUAGE_char,LANGUAGE_char2, CONVERT (cn_text, LANGUAGE_char,LANGUAGE_char2),'CONVERT(string,LANGUAGE_char,LANGUAGE_char2)','2' FROM dual;         INSERT INTO KILLEN_TEST(COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,TEST_KEY)   SELECT cn_text ,LANGUAGE_char,LANGUAGE_char2, CONVERT (cn_text, LANGUAGE_char2,LANGUAGE_char),'CONVERT(string,LANGUAGE_char2,LANGUAGE_char)','3' FROM dual;COMMIT;END LOOP;END LOOP;EXCEPTION
WHEN  OTHERS THEN INSERT INTO KILLEN_TEST(COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,TEST_KEY)SELECT cn_text ,LANGUAGE_char,LANGUAGE_char2, '','err','4' FROM dual;
END KILLENTEST;

结果

SELECT * FROM KILLEN_TEST kt  WHERE COLUMN3 in('中国','中國');

结果1:FAIL

中国   AL24UTFFSS      中国  CONVERT(string,dest_LANGUAGE_char)  2022-04-28 11:51:33
中国  UTF8            中国  CONVERT(string,dest_LANGUAGE_char)  2022-04-28 11:51:33
中国  AL32UTF8        中国  CONVERT(string,dest_LANGUAGE_char)  2022-04-28 11:51:33

结果2:SQL 错误 [12703] [72000]: ORA-12703: 不支持此字符集转换

总结

最终我还是决定不搞数据库了,我还是用代码解决吧,头秃。

Oracle 繁简体转换(未解决)相关推荐

  1. 连接Oracle错误:800a0e7a未找到提供程序的解决

    一.现象: C#程序中需要以Provider=OraOLEDB.Oracle.1方式访问ORACLE数据库.但程序执行时报异常:未在本地计算机注册"OraOLEDB.Oracle.1&quo ...

  2. 未解决oracle错误12505、01034、27101

    很久没用Oracle,连接,出现下面错误: 根据资料:listener.ora文件,如果没有下图红框部分,应加上: 然后重启Oracle服务:再连接:又报下图错误: 根据资料,可在sqlplus输入s ...

  3. oracle日记账单据编号未生成_商管财务数据平台Oracle与共享未付池差异如何核对、解决?...

    ‍‍近期,总部新上线财务数据平台啦!各个系统间的差异异常数据清晰可见,随时可查,今天就和小伙伴们一起分享一下Oracle与共享未付池差异如何核对.解决.首先,将Oracle与共享未付池差异数据导出.由 ...

  4. oracle切换sqlserver,ORACLE语法转换成sqlserver,该如何解决

    ORACLE语法转换成sqlserver 小弟在 ORACLE写了一个小函数,但是在sqlserver里执行不了,小弟不怎么懂得sqlserver的语法,大家帮忙看看,给指正指正 CREATE OR  ...

  5. oracle编码转换utf16,oracle编码转换:AL32UTF8-ZHS16GBK

    --修改Oracle数据库字符集为utf-8: SQL>conn / as sysdba; SQL>shutdown immediate; SQL>startup mount; SQ ...

  6. WUSTOJ 1324: Base64 Coding(Java)未解决,求题解

    题目链接:1324: Base64 Coding 资料:ASCII码表 原文是英文,而且篇幅较长.因此下面不粘贴原文,只写中文大意. Description Base64是一种编码算法.它的工作原理是 ...

  7. 连接远程服务器CredSSP加密Oracle修正报错解决办法

    连接远程服务器CredSSP加密Oracle修正报错解决办法: 打开注册表,快捷输入 "regedit"(类似找命令提示符 输入 cmd 一样)找文件夹 路径:HKLM(缩写)\S ...

  8. 为office添加繁简体转换

    为office添加繁简体转换 本人所在的公司是一间港资公司,很多香港同事习惯繁体,而我们内地的同事则习惯简体,于是免不了要进行繁简体转换,这时候就要装一个office的插件来达到这样的功能,如下: 1 ...

  9. 计算机科学界至今未解决的四大难题

    作者:Shalitha Suranga 译者:弯月     责编:张文 出品:CSDN(ID:CSDNnews) 在现实生活中,很多难题的解决方案都用到了计算机科学的基础理论.例如, Git 分布式版 ...

  10. ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法

    ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法(转载) 10小时前 ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法(转载) 分类: ASP.NET| ...

最新文章

  1. 一段代码到可执行程序所有经历
  2. VUE 路径拦截, 开放页面, 基于动态路由, 拦截器
  3. QML中的JavaScript表达式
  4. Asp.Net.Core WebApi 版本控制
  5. 关于IE6、7、8下实现盒阴影的几个注意点
  6. php7 连接mysql插件_php7
  7. 联姻寺库,一次半斤八两的合作,趣店的奢侈品生意仍看不见未来
  8. mysql 代替分号_php – mysql FIND_IN_SET()用分号代替逗号
  9. [洛谷P3346][ZJOI2015]诸神眷顾的幻想乡
  10. html怎么写java代码_html中怎么写java代码
  11. javaWeb——servlet的认识及Tomcat动态部署
  12. 物联网无线通信技术 低功耗WiFi模块 WiFi芯片技术应用
  13. SQL Server 创建和管理数据表
  14. oracle查看某个分区的数据,查看oracle表的分区信息
  15. IPD电源REL-70-4006
  16. 将 Cpar 文件导入 2019 版的 Carsim 后,无法打开 video+plot 是什么问题?
  17. Flutter网络请求方式总结
  18. css3 从左到右自动换行和多行排列方式
  19. 傻白探索Chiplet,一些相关术语和问题记录(二)
  20. 用PHP开发APP端微信支付

热门文章

  1. chrome浏览器升级导致无法手动设置cookie,设置无法保存
  2. 【Meta Learning学习笔记】Meta Learning详解
  3. 什么是CC攻击,CC攻击的防御方式有哪些
  4. windows 远程桌面连接 bat
  5. word2vec训练维基百科中文词向量
  6. 新手如何建立网站,网站建设的几个步骤。
  7. 计算机启动检测不到硬盘,电脑BIOS启动项找不到硬盘,该怎么办?
  8. 史上最全最基础的Oracle数据库教程(入门一)介绍Oracle默认用户
  9. 【NLP】Transformer框架原理详解-1
  10. unity 角度限制_Unity3D实现摄像机镜头移动并限制角度