我们有一个包含“Tranditional Chinese”字符和英文的oracle数据库,环境是:
PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8PC850
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 9.2.0.4.0
我将此数据库中的所有数据导出为* .sql文件作为“ansi”编码,当我在同一台计算机上打开时,所有中文字符都已损坏。
当我将它导入另一个oracle并且环境是:
> NLS_LANGUAGE|AMERICAN
> NLS_TERRITORY|AMERICA NLS_CURRENCY|$
> NLS_ISO_CURRENCY|AMERICA
> NLS_NUMERIC_CHARACTERS|.,
> NLS_CHARACTERSET|WE8MSWIN1252
> NLS_CALENDAR|GREGORIAN
> NLS_DATE_FORMAT|DD-MON-RR
> NLS_DATE_LANGUAGE|AMERICAN
> NLS_SORT|BINARY
> NLS_TIME_FORMAT|HH.MI.SSXFF AM
> NLS_TIMESTAMP_FORMAT|DD-MON-RR
> HH.MI.SSXFF AM
> NLS_TIME_TZ_FORMAT|HH.MI.SSXFF AM TZR
> NLS_TIMESTAMP_TZ_FORMAT|DD-MON-RR
> HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY|$
> NLS_COMP|BINARY
> NLS_LENGTH_SEMANTICS|BYTE
> NLS_NCHAR_CONV_EXCP|FALSE
> NLS_NCHAR_CHARACTERSET|AL16UTF16
> NLS_RDBMS_VERSION|10.2.0.1.0
所有中文字符仍然存在损坏。 有人可以给我任何建议吗?
我还有另一个问题,为什么有时我们可以将“传统中文”或“简化中文”保存到带有“ANSI”编码的文本文件中,并且字符不会被破坏。但有时它会... ??为什么 有人可以解释所有这些奇怪的事情吗?
提前致谢!
答案 0 :(得分:0)
中文字符被“损坏”的原因仅仅是因为它们不在字符集“ANSI”(windows-1252)中。此字符集仅包含拉丁字符。
偶然你有时可以让它们被某些应用程序识别,因为有些应用程序很聪明,可以理解你使用了错误的字符集(即他们猜你错了,例如记事本就是这种情况) 。但是,在你的情况下,你应该:
NLS_LANG=AMERICAN_AMERICA.UTF8
)的字符集,并使用为您工作的实用程序(SQL * Loader,数据库链接...)