我正在使用sqlldr加载一个csv文件。
该文件包含符号"€"
,该符号已插入VARCHAR2列。
加载后,数据库显示'¿'
而不是欧元符号。
我在加载过程中在控制文件中指定了字符集:
LOAD DATA
CHARACTERSET WE8MSWIN1252
我正在
Solaris
机器上运行所有这些程序,顺便说一下,该机器无法显示'€'符号,而是在我敲键获取€时给了我'.'
。我们将数据用于BI用途,因此即使将其类型更改为nvarchar2也会正确插入€符号,我们也必须保留varchar2列。
您可以提出其他解决方案吗?
当我在机器上运行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变量,但似乎没有任何效果。
问候。
最佳答案
您的数据库未配置为支持VARCHAR2
列中的欧元字符。数据库的NLS_CHARACTERSET
of WE8DEC表示它使用旧的DEC MCS character set。该字符集早于欧元字符(它甚至比欧元早于ISO 8859-1字符集还早)。因此,您不能在数据库的VARCHAR2
列中有效存储欧元字符。
您可以将数据库字符集更改为支持欧元字符的内容。有许多这样的字符集,但我想ISO-8859-15,Windows-1252或UTF-8是最容易的迁移。就个人而言,我总是喜欢Unicode(UTF-8,这是Oracle中的AL32UTF8字符集),但是您可能有理由偏爱单字节字符集。另外,由于您的国家字符集支持Unicode,因此您可以将此列(以及需要使用欧元字符的任何其他列)声明为NVARCHAR2
列。支持NVARCHAR2
列可能需要更改前端应用程序。如果可以更改数据库字符集,那将是我强烈希望添加NVARCHAR2
列。
关于oracle - 在Oracle SQL LOAD期间未正确插入欧元“€”符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30512244/