如何使用SQL确定Oracle DB字段中的字符是否在UTF8字符集中,但在LATN-1之外?

如何使用SQL确定Oracle DB字段中的字符是否在UTF8字符集中,但在LATN-1之外?,oracle,utf-8,data-conversion,latin1,Oracle,Utf 8,Data Conversion,Latin1,我目前需要编写一个SQL查询来确定我的UTF8 Oracle数据库中与另一个使用LATIN-1的系统不兼容的行数 例如,Über不应返回结果,而是翻译 应该 我尝试过以下查询: select decode(convert(convert('Über test', 'WE8ISO8859P1'), 'UTF8'), convert('Über test', 'UTF8'), 1, 0) from dual; 然而,这并没有给我所需要的结果。有人能提供这个问题的纯SQL解决方案吗?谢谢您没有提及O

我目前需要编写一个SQL查询来确定我的UTF8 Oracle数据库中与另一个使用LATIN-1的系统不兼容的行数

例如,Über不应返回结果,而是翻译 应该

我尝试过以下查询:

select decode(convert(convert('Über test', 'WE8ISO8859P1'), 'UTF8'), convert('Über test', 'UTF8'), 1, 0) from dual;

然而,这并没有给我所需要的结果。有人能提供这个问题的纯SQL解决方案吗?谢谢

您没有提及Oracle版本。在11.2之前,应使用Oracle提供的字符集扫描仪CSSCAN进行此操作。从12.1开始,有一个新的实用程序叫做Oracle Database Migration Assistant for Unicode。

我想我已经找到了答案:

从select ASCISTRCONVERT中选择*test string goes here、'UTF8'作为str from dual where REGEP_likestr、\\\[1-9A-F]| 0[1-9A-F].'

作为参考,unicode的拉丁-1块以\00FF结尾

比如说,

SQL> select * from (select asciistr(convert('翻译', 'UTF8')) as str from dual) where regexp_like(str, '.*\\([1-9A-F]|0[1-9A-F]).*');

STR
------------------------------
\7FFB\8BD1

如果有人能从逻辑的角度对此进行双重检查,我将不胜感激。

感谢您的建议,我将研究这些问题-不幸的是,我无法在此数据库上运行任何实用程序。我必须通过标准SQL查询执行。