sau*_*abh 5 oracle grails cyrillic
我正在处理连接到oracle数据库的grails应用程序.它工作正常,除非数据库中有任何俄语文本.对于俄语文本,我被倒置了?在mysql的其他问题中有一些方法,但我找不到oracle的数据源配置.这里的任何帮助都会很棒.
编辑 - 俄语文本存储在varchar2数据类型中.这是查询 -
SELECT*FROM NLS_DATABASE_PARAMETERS参数类似于'%SET'; NLS_CHARACTERSET WE8MSWIN1252
NLS_NCHAR_CHARACTERSET AL16UTF16
以下查询的结果意味着什么?
\n\nSELECT * FROM NLS_DATABASE_PARAMETERS \nWHERE PARAMETER LIKE \'%SET\';\nPARAMETER VALUE \n------------------------------ ------------------------------\nNLS_NCHAR_CHARACTERSET AL16UTF16 \nNLS_CHARACTERSET WE8MSWIN1252 \nRun Code Online (Sandbox Code Playgroud)\n\n这意味着:
\n\nNVARCHAR2变量、表列和文字中的数据进行编码VARCHAR2变量、表列和文字中的数据进行编码不幸的是 WE8MSWIN1252 是 CP-1252 代码页,不支持俄语西里尔字符(如 \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e \xd0\xb0\xd1\x82 等)。
\n请参阅此链接以了解此代码页支持的字符:en.wikipedia.org/wiki/Windows-1252。\n
\n安装过程中有人没有考虑俄语字符,可能选择了错误的代码页。该文档列出了支持俄语的代码页(请参见表 A-13 LCSSCAN 和 GDK 支持的语言和字符集):
\n https://docs.oracle.com/database/121/NLSPG/applocaledata.htm#NLSPG585
\n\n\n俄语
\n\nAL16UTF16、AL32UTF8、CL8ISO8859P5、CL8KOI8R、CL8MSWIN1251、RU8PC866、\n UTF8
\n
您可以在以下示例中观察使用此代码页的效果:
\n\nSELECT * FROM NLS_DATABASE_PARAMETERS \nWHERE PARAMETER LIKE \'%SET\'; \nPARAMETER VALUE \n------------------------------ ------------------------------\nNLS_NCHAR_CHARACTERSET AL16UTF16 \nNLS_CHARACTERSET WE8MSWIN1252 \n\n\nselect \'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' x, n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' y from dual;\nX Y \n---------- ----------\n\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\nRun Code Online (Sandbox Code Playgroud)\n\n并且:
\n\ncreate table test(\n v1 varchar2(100),\n v2 nvarchar2(100)\n);\n\ninsert into test( v1, v2 ) values (\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\', \'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' );\ninsert into test( v1, v2 ) values (n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\', n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' );\n\nselect * from test;\nV1 V2 \n--------------- ---------------\n\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \n\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82 \nRun Code Online (Sandbox Code Playgroud)\n\n并且:
\n\ncreate FUNCTION function1( par varchar2 ) return varchar2 \nIS\nBEGIN \n return par;\nEND;\n/\ncreate FUNCTION function2( par nvarchar2 ) return varchar2 \nIS\nBEGIN \n return par;\nEND;\n/\ncreate FUNCTION function3( par varchar2 ) return nvarchar2 \nIS\nBEGIN \n return par;\nEND;\n/\ncreate FUNCTION function4( par nvarchar2 ) return nvarchar2 \nIS\nBEGIN \n return par;\nEND;\n/\n\nselect function1( n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' ) x1,\n function2( n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' ) x2,\n function3( n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' ) x3,\n function4( n\'\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82\' ) x4\nfrom dual;\n\nX1 X2 X3 X4 \n--------------- --------------- --------------- ---------------\n\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf\xc2\xbf \xd0\xba\xd0\xbe\xd0\xbd\xd1\x81\xd1\x8d\xd0\xba\xd0\xb2\xd1\x8e\xd0\xb0\xd1\x82 \nRun Code Online (Sandbox Code Playgroud)\n\n正如您从上面的示例中看到的,只有NVARCHAR2值被正确存储和转换,任何VARCHAR2值的使用都会导致转换为 WE8MSWIN1252 代码页,并且所有俄语字符都会丢失。
在目前的情况下你可以做什么:
\n\nNVARCHAR2而不是VARCHAR2数据类型 - 您需要重写所有数据库过程、函数、触发器等。| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |