暂无图片
Oracle中生僻字的存储和显示:㼆 㱔 䶮 𬎆
最近更新:2022-02-25 16:41:11

在任何数据库中存储生僻字,其实都和一个因素有关:字符集。

能否正常存储一个字符,首先是要看要存储的字符在数据库的当前字符集中是否能够表达。如果包含在数据库字符集中,则能够正常存储。如果字符集不支持,可以看国家字符集是否支持,通常这两者可以解决大多数问题。

但是注意,很多时候,本应正常存储的字符,可能在写入过程中,因为环境问题转换错误,丢失了正确的字符,而出现乱码。

标题中出现的生僻字读音:㼆 yíng ,㱔 suǒ,䶮 yǎn

*乱码的情况*

我们首先举一个例子:本应正常存储的字符,因为环境问题而出现乱码。

示范数据库的字符集:

SQL> select name,value$ from sys.props$ where name like '%CHARACTERSET';

NAME
--------------------------------------------------------------------------------
VALUE$
--------------------------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_CHARACTERSET
AL32UTF8

创建测试表,插入一个汉字。

SQL>  create table mogdb (cname varchar2(20));

Table created.

SQL> insert into mogdb values('㼆');

1 row created.

SQL> select * from mogdb;

CNAME
--------------------
???

注意,此时的查询结果显示乱码,以问号形式输出。我们可以通过dump函数查看底层存储的真实编码:

SQL> select dump(cname,1016) from mogdb;

DUMP(CNAME,1016)
--------------------------------------------------------------------------------
Typ=1 Len=9 CharacterSet=AL32UTF8: ef,bf,bd,ef,bf,bd,ef,bf,bd
......