如何正确读取带有外部表的UTF-8字符

时间:2019-03-14 10:49:12

标签: sql oracle utf-8 character-encoding external-tables

我有一个用uft8编码的CSV文件。记录的字段中有文字

在文本中是用两个字符编码的字符。 例如Österreich一词中 字符Ö编码为O¨,而不是Ö

如果我在编辑器中打开文件,则看到正确的单词Österreich

enter image description here

如果我通过选择外部表来查看文件,那么我会看到O¨sterreich

创建外部表时,我已经添加了访问参数CHARACTERSET AL32UTF8

ACCESS PARAMETERS (
 RECORDS DELIMITED BY NEWLINE 
 CHARACTERSET AL32UTF8 
 STRING SIZES ARE IN BYTES  
 skip 1
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LDRTRIM 
 MISSING FIELD VALUES ARE NULL   
)

是否有可能或一个参数告诉oracle将输出中的两个字符合并为一个?

1 个答案:

答案 0 :(得分:1)

看起来Oracle外部表无法将U+004F U+0308正确转换为单个Ö

如果您将数据库从WE8MSWIN1252迁移到AL32UTF8(UTF-8),我认为结果会很好,请参阅https://docs.oracle.com/database/121/NLSPG/ch11charsetmig.htm#NLSPG011

或修改CSV文件,并用U+004F U+0308替换字符U+00D6,称为Unicode Normalization

您也可以看看Characters and Combining Marks