如何在Oracle中存储Unicode字符?

时间:2016-10-25 11:36:13

标签: java oracle character-encoding

我有一个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.

2 个答案:

答案 0 :(得分:2)

您无法在字符集WE8MSWIN1252中存储阿拉伯字符。

但是有一条逃生路线:national character set 如果您将列定义为NVARCHAR2而不是VARCHAR2,则可以在其中存储任何字符。

答案 1 :(得分:2)

自己(以及在数据库上工作的所有其他人)帮忙并升级数据库以使用AL32UTF8作为默认数据库字符集。与使用NVARCHAR2一些选定的列相比,这是一次更大的努力,但它将来会节省大量的工作和麻烦。

有关说明,请参阅Character Set Migration