大佬教程收集整理的这篇文章主要介绍了grails 3 oracle数据源为俄语文本,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑 –
俄语文本存储在varchar2数据类型中.
这是查询 –
SELECT * FROM NLS_DATABASE_ParaMETERS参数类似于’%SET’;
NLS_CHaraCTERSET WE8MSWIN1252
NLS_NCHAR_CHaraCTERSET AL16UTF16
SELECT * FROM NLS_DATABASE_ParaMETERS WHERE ParaMETER liKE '%sET'; ParaMETER VALUE ------------------------------ ------------------------------ NLS_NCHAR_CHaraCTERSET AL16UTF16 NLS_CHaraCTERSET WE8MSWIN1252
这意味着:
> AL16UTF16编码(Unicode的16位编码)用于编码NVARCHAR2变量,表格列和文字中的数据
> WE8MSWIN1252(基于8位ASCII的Oracle数据库字符集)用于编码VARCHAR2变量,表格列和文字中的数据
不幸的是,WE8MSWIN1252是CP-1252代码页,它不支持俄语西里尔字符(如консэквюат等).
请参阅此链接以了解此代码页支持的字符:en.wikipedia.org/wiki/Windows-1252.
安装过程中有人没有考虑俄语字符,可能选择了错误的代码页.该文档列出了支持俄语的代码页(参见表A-13 LCSSCAN和GDK支持的语言和字符集):
https://docs.oracle.com/database/121/NLSPG/applocaledata.htm#NLSPG585
您可以在以下示例中观察使用此代码页的效果:
SELECT * FROM NLS_DATABASE_ParaMETERS WHERE ParaMETER liKE '%sET'; ParaMETER VALUE ------------------------------ ------------------------------ NLS_NCHAR_CHaraCTERSET AL16UTF16 NLS_CHaraCTERSET WE8MSWIN1252 select 'консэквюат' x,n'консэквюат' y from dual; X Y ---------- ---------- ¿¿¿¿¿¿¿¿¿¿ консэквюат
并且:
create table test( v1 varchar2(100),v2 nvarchar2(100) ); insert into test( v1,v2 ) values ('консэквюат','консэквюат' ); insert into test( v1,v2 ) values (n'консэквюат',n'консэквюат' ); select * from test; V1 V2 --------------- --------------- ¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿¿¿¿¿ консэквюат
并且:
create FUNCTION function1( par varchar2 ) return varchar2 IS BEGIN return par; END; / create FUNCTION function2( par nvarchar2 ) return varchar2 IS BEGIN return par; END; / create FUNCTION function3( par varchar2 ) return nvarchar2 IS BEGIN return par; END; / create FUNCTION function4( par nvarchar2 ) return nvarchar2 IS BEGIN return par; END; / select function1( n'консэквюат' ) x1,function2( n'консэквюат' ) x2,function3( n'консэквюат' ) x3,function4( n'консэквюат' ) x4 from dual; X1 X2 X3 X4 --------------- --------------- --------------- --------------- ¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿¿¿¿¿ консэквюат
从上面的示例中可以看出,只有NVARCHAR2值被正确存储和转换,任何VARCHAR2值的使用都会导致转换为WE8MSWIN1252代码页,并且所有俄语字符都将丢失.
在目前的情况下你可以做些什么:
>在所有表和存储过程中使用NVARCHAR2而不是VARCHAR2数据类型 – 您需要重写所有数据库过程,函数,触发器等.
>将数据库迁移到支持俄语的另一个字符集.这不是一件容易的事,而且这个问题很突出,有关详细信息,请参阅文档:https://docs.oracle.com/database/121/NLSPG/ch11charsetmig.htm#NLSPG011并与您的DBA讨论此主题
以上是大佬教程为你收集整理的grails 3 oracle数据源为俄语文本全部内容,希望文章能够帮你解决grails 3 oracle数据源为俄语文本所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。