我正在使用sqlldr加载csv文件。
该文件包含插入VARCHAR2列的符号"€"
。
加载后,数据库显示'¿'
而不是欧元符号。
我在加载期间在控制文件中指定了字符集:
LOAD DATA
CHARACTERSET WE8MSWIN1252
我在Solaris
机器上运行所有这些,顺便说一句,它不能显示'€'符号,当我点击键获取时,我给了'.'
€。
我们正在将数据用于BI目的,因此我们必须保留varchar2列,即使将其类型更改为nvarchar2也会正确插入€符号。
您能为此问题提出任何其他解决方案吗?
当我在machin上运行locale命令时,我得到:
LANG=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
和我的NLS数据库参数是:
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8DEC
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_LANG变量,但似乎没有任何效果。 问候。
答案 0 :(得分:4)
您的数据库未配置为支持VARCHAR2
列中的欧元字符。您的数据库NLS_CHARACTERSET
of WE8DEC表示它使用旧的DEC MCS character set。该字符集早于欧元字符(它甚至比ISO 8859-1字符集早于欧元之前)。因此,您无法在数据库的VARCHAR2
列中有效地存储欧元字符。
您可以将数据库字符集更改为支持Euro字符的内容。有许多这样的字符集,但我猜想ISO-8859-15,Windows-1252或UTF-8将是最简单的迁移。就个人而言,我总是更喜欢Unicode(UTF-8,这是Oracle中的AL32UTF8字符集),但您可能有理由更喜欢单字节字符集。或者,您可以将此列(以及需要使用欧元字符的任何其他列)声明为NVARCHAR2
列,因为您的国家字符集支持Unicode。支持NVARCHAR2
列可能需要更改前端应用程序。如果您可以更改数据库字符集,那么这将是我对添加NVARCHAR2
列的强烈偏好。