我有一个Oracle数据库。我试图在表格中存储阿拉伯字符,但它会导致数据库中出现反向问号。该列的数据类型为VARCHAR2。
我使用以下查询来检查字符集。
SELECT * FROM NLS_DATABASE_PARAMETERS
字符集是WE8MSWIN1252。我怎么处理呢?
SQL> select * from nls_database_parameters ORDER BY PARAMETER;
PARAMETER VALUE
------------------------------ ---------------------------------------
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET WE8MSWIN1252
NLS_COMP BINARY
NLS_CURRENCY $
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_LANGUAGE AMERICAN
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CHARACTERSET AL16UTF16
PARAMETER VALUE
----------------------- ----------------------------------------
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_RDBMS_VERSION 11.2.0.3.0
NLS_SORT BINARY
NLS_TERRITORY AMERICA
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
20 rows selected.
答案 0 :(得分:2)
您无法在字符集WE8MSWIN1252中存储阿拉伯字符。
但是有一条逃生路线:national character set
如果您将列定义为NVARCHAR2
而不是VARCHAR2
,则可以在其中存储任何字符。
答案 1 :(得分:2)
自己(以及在数据库上工作的所有其他人)帮忙并升级数据库以使用AL32UTF8作为默认数据库字符集。与使用NVARCHAR2
一些选定的列相比,这是一次更大的努力,但它将来会节省大量的工作和麻烦。
有关说明,请参阅Character Set Migration。