gpt4 book ai didi

带有非英文字符的 Oracle 搜索文本

转载 作者:行者123 更新时间:2023-12-04 19:18:19 25 4
gpt4 key购买 nike

我们的 Oracle 数据库是 UTF8。我们正在存储需要可搜索的地址。一些街道名称包含非英文字符(例如 Peña Báináõ ),这需要可搜索为“ Peña Báináõ ”或英文等效字符,如“07x104o”。我们所做的是转换查询中的文本,例如:

SELECT CONVERT('Peña Báináõ','US7ASCII') as converted FROM dual;

但这里的问题是,并非所有字符都有对应的英文字符(甚至不是一些非常明显的字符,例如 ñ 或 õ),因此我们最终将文本转换为:
Pe?a Baina?

因此,如果用户试图找到键入“ Pena Bainao ”的地址,他找不到它,因为“ Pena Bainao ”与“” 不同? ""。

我们已经为此找到了一些肮脏的解决方法,但我想首先检查是否有人找到了更优雅的解决方案。

以下是一些未转换为 US7ASCII 的字符列表:
Character     UTF8 Code     Possible Equivalent   
æ - u00E6 - ae
å - u00E5 - a
ã - u00E3 - a
ñ - u00F1 - n
õ - u00F5 - o

最佳答案

1) 使用 nlssort使用 BINARY_AI(大小写和重音不敏感):

SQL> select nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select nlssort('Pena Bainao', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select nlssort('pena bainao', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select 'true' T from dual where nlssort('pena bainao', 'NLS_SORT = BINARY_AI') = nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') ;

T
----
true

2)您也可以将 NLS_SORT session 变量更改为 binary_ai,然后您就不必每次都指定 NLS_SORT:
SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ;

no rows selected

SQL> alter session set nls_sort = binary_ai;

Session altered.

SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ;

T
----
true

3) 放弃使用 nlssort函数并更改所有内容的语义,还设置 nls_comp session 变量:
SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ';

no rows selected

SQL> alter session set nls_comp = linguistic;

Session altered.

SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ';

T
----
true

选项 1 仅更改本地行为,即您想要不同结果的查询。选项 2 和 3 将改变其他查询的行为,可能不是您想要的。见 Table 5-2Oracle® Database Globalization Support Guide .另请查看“ Using Linguistic Indexes”部分以了解如何使用索引。

关于带有非英文字符的 Oracle 搜索文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6682173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com