Oracle 繁简体转换(未解决)

背景

        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
IS

cn_text varchar(100);
LANGUAGE_char varchar(100);
ctn_text varchar(100) ;
 
BEGIN
	
	DELETE 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
IS

cn_text varchar(100);
LANGUAGE_char varchar(100);
LANGUAGE_char2 varchar(100);
ctn_text varchar(100) ;
 
BEGIN
	
	DELETE 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%' then
		CONTINUE;
		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%')			
		LOOP
					

		
			LANGUAGE_char2 :=y.value;
		IF LANGUAGE_char2 LIKE 'JA%' OR LANGUAGE_char=LANGUAGE_char2  then
		CONTINUE;
		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: 不支持此字符集转换

总结

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值