如何使用sqlplus在Oracle中插入具有正确十六进制值的变音符号

时间:2011-07-15 02:25:22

标签: sql oracle internationalization

我在文本文件中有一个ummlaut,带有十六进制转储值

cat /tmp/bb
ü

hexdump /tmp/bb
0000000 bcc3 000a                              
0000003

当我使用VARCHAR2类型的列(128 CHAR)将变音符号插入数据库时​​

DUMP(res,1016)
Typ=1 Len=6 CharacterSet=UTF8: ef,bf,bd,ef,bf,bd

字节完全不同。 (我的数据库设置为UTF8字符集)

问我如何使用sqlplus将数据插入列中。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

假设你的意思是你有一个分音符,而不是au与unmlat,你可以使用UNISTR函数输入SQL * Plus中的字符的UCS-2代码点(U + 00FC for au with a deresis )

SQL> create table foo (
  2    col1 varchar2(1 char)
  3  );

Table created.

SQL> insert into foo values( unistr('\00fc') );

1 row created.

SQL> ed
Wrote file afiedt.buf

  1  select dump(col1, 1016)
  2*   from foo
SQL> /

DUMP(COL1,1016)
-------------------------------------------------------------

Typ=1 Len=2 CharacterSet=AL32UTF8: c3,bc

但是,如果您只是尝试将文件中的数据读入数据库,那么将所有内容转换为UCS-2代码点可能更容易。