Mar*_*era 2 oracle character-set
这是 aix 6100-02 上的 Oracle 10gr2
问题是我没有看到 Oracle 的 € 标志。
这是查看问题的简单方法:
SQL> insert into prueba values ('€');
SQL> commit;
SQL> select * from prueba;
EURO
------------------------------------------------------------
¿
SQL>
Run Code Online (Sandbox Code Playgroud)
这是我已经做过的测试。
我从外壳中看到它:
oracle@krats:/u01#perl -Mcharnames=:full -CS -wle 'print "\N{EURO SIGN}"'
€
oracle@krats:/u01#
Run Code Online (Sandbox Code Playgroud)
但我没有从 sql 中看到它:
SQL> select chr(128) from dual;
C
-
SQL>
Run Code Online (Sandbox Code Playgroud)
该数据库具有以下 NLS_SESSION_PARAMETERS;
SQL> SELECT * FROM NLS_SESSION_PARAMETERS;
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE SPANISH
NLS_TERRITORY SPAIN
NLS_CURRENCY ¿
NLS_ISO_CURRENCY SPAIN
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE SPANISH
NLS_SORT SPANISH
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY ¿
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
17 filas seleccionadas.
SQL>
Run Code Online (Sandbox Code Playgroud)
我创建了一个表格来显示这一点。
oracle@krats:/u01#NLS_LANG=SPANISH_SPAIN.UTF8
oracle@krats:/u01#export NLS_LANG
oracle@krats:/u01#sqlplus "/ as sysdba"
SQL> create table prueba (euro nvarchar2(20));
table created.
SQL> insert into prueba values ('€');
1 fila creada.
SQL> commit;
Confirmación terminada.
SQL> select * from prueba;
EURO
------------------------------------------------------------
¿
SQL>
Run Code Online (Sandbox Code Playgroud)
最后,我不确定是否重要,但这是 oracle 用户环境变量:
SQL> host env;
_=/usr/bin/env
LANG=en_US
LOGIN=oracle
PAGER=/usr/bin/pg
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/u01/bin:/usr/bin/X11:/sbin:.:/u01/oracle/product/10.2/db_1/bin/
NLS_LANG=SPANISH_SPAIN.WE8ISO8859P1
ORACLE_BASE=/u01/oracle/product
LC__FASTMSG=true
EDITOR=/usr/bin/vim
KM_CRYPTO_LIB_PATH=/usr/lib/libkmcryptolib.so
LOGNAME=oracle
MAIL=/usr/spool/mail/oracle
LOCPATH=/usr/lib/nls/loc
ORACLE_SID=DIESEL
PS1=oracle@krats:${PWD}#
USER=oracle
AUTHSTATE=files
ORA_NLS10=/u01/oracle/product/10.2/db_1/nls/data
SHELL=/usr/bin/ksh
ODMDIR=/etc/objrepos
R_SHLIB_LD_LIBRARY_PATH=/usr/lib
HOME=/u01
FCEDIT=/usr/bin/vi
TERM=vt100
MAILMSG=[YOU HAVE NEW MAIL]
ORACLE_HOME=/u01/oracle/product/10.2/db_1
PWD=/u01
TZ=Europe/Madrid
KM_SUPPORT_LIB_PATH=/usr/lib/libkmsvcshlib.so
ORACLE_BIN=/u01/oracle/product/10.2/db_1/bin/
A__z=! LOGNAME
NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/%L/%N.cat
SQL>
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过类似的情况?
非常感谢。
您的数据库字符集是WE8ISO8859P1,它没有€符号。使用NVARCHAR2或更改您的数据库字符集(导出,使用支持欧元符号的字符集重新安装,如WE8ISO8859P15或AL32UTF8,然后导入)。
下面是一个例子NVARCHAR2:
SQL> SELECT * FROM nls_database_parameters WHERE parameter LIKE '%SET';
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8ISO8859P1
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我和你的情况一样。
SQL> CREATE TABLE prueba (id NUMBER, euro NVARCHAR2(20));
Table created.
SQL> INSERT INTO prueba VALUES (1, N'€');
1 row created.
SQL> INSERT INTO prueba VALUES (2, UNISTR('\20AC'));
1 row created.
SQL> INSERT INTO prueba VALUES (3, NCHR(8364));
1 row created.
SQL> INSERT INTO prueba VALUES (4, CHR(8364 USING NCHAR_CS));
1 row created.
SQL> INSERT INTO prueba VALUES (5, '€');
1 row created.
SQL> SELECT id, euro, ascii(euro) FROM prueba;
ID EURO ASCII(EURO)
---------- -------------------- -----------
1 € 8364
2 € 8364
3 € 8364
4 € 8364
5 ¿ 191
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18843 次 |
| 最近记录: |