Oracle 中文记录 及 乱码 判断 说明


一. 判断记录中是否有中文

这个可以使用Length 和 Lengthb 函数。 这个在blog里有说明:

Oracle Length 和 Lengthb 函数说明

http://blog.csdn.net/tianlesoftware/article/details/6863797

这种方法使用与字符集为GBK的情况,其他情况不使用。在GBK 字符集下,中文的length 是1个字符,而lengthb 是2个byte。

示例:

select * from t where length(c1) != lengthb(c1);

二. 判断记录中是否有乱码

这里需要使用asciistr 函数,ASCIISTR 的官网说明:

http://download.oracle.com/docs/cd/E11882_01/server.112/e26088/functions014.htm#i1000190

ASCIISTRtakesas its argument a string, or an expression that resolves to a string, in anycharacter set and returns an ASCII version of the string in the databasecharacter set. Non-ASCII characters are converted to the form\xxxx, wherexxxxrepresentsa UTF-16 code unit.

ASCIISTR函数会把非ASCII 的字符转换成\xxxx 的格式,xxxx 是UTF-16的code unit。

示例:

SQL> select asciistr('/\/Davecome from 安?庆?') as str from dual;

/\005C/Dave come from \5B89?\5E86?

这里的’安’ 被转换成了\5B89,‘庆’被转换成了\5E86。

这里要注意一个特殊字符“\”,当它出现的时候转换后的码为“\005C”。

当然,我们也可以使用UNISTR函数,把asciistr 的结果反转回来,如:

SQL>select UNISTR('\5E86') from dual;

那么当我们的记录中存在中文乱码时,

select UNISTR('\FFFD') from dual;

注意一点:

执行以上SQL 不要在sqlplus 里执行,sqlplus 受本地环境影响。到第三方的工具(PL/SQL DEV 或者Toad)里测试。

那么当我们的中文记录变成乱码后,那么转成asciistr的值就会包含2种特殊符号: ? 和 \FFFD 对应的问号。我们只需要匹配这2种符号,就可以判断记录里是否有乱码了。

HelloJin 同学提供的判断乱码的存储过程:



该存储过程由HelloJin同学编写,感谢他的辛勤劳动。

这里的核心语句是:



Oracle Parallel Execution(并行执行)

http://blog.csdn.net/tianlesoftware/article/details/5854583

如果是因为复制导致的乱码,可以和源库进行匹配,然后使用replace函数替换掉乱码。

下面的SQL 可以处理库之间复制导致的乱码:



该代码同样由HelloJin 同学提供。


其他文档:

Common Character Sets Found in InternetEmails [ID 477967.1]

-------------------------------------------------------------------------------------------------------

Blog: http://blog.csdn.net/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Email: [email protected]

DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满)

DBA 超级群:63306533(满); DBA4 群:83829929(满) DBA5群: 142216823(满)

DBA6 群:158654907(满) DBA7 群:69087192(满)DBA8 群:172855474

DBA 超级群2:151508914 DBA9群:102954821 聊天 群:40132017(满)

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请


你可能感兴趣的:(oracle)