Che*_*ech 5 oracle encoding utf-8 internationalization
我们的Oracle DB是UTF8.我们正在存储需要搜索的地址.一些街道名称包含非英语字符(例如PeñaBáináõ),这需要作为" PeñaBáináõ "或与" Pena Bainao " 等英语等效字符进行搜索.我们所做的是转换查询上的文本,如:
SELECT CONVERT('Peña Báináõ','US7ASCII') as converted FROM dual;
Run Code Online (Sandbox Code Playgroud)
但问题在于并非所有角色都具有英语等效(甚至不是一些非常明显的角色,如ñ或õ)所以我们最终将文本转换为:
Pe?a Baina?
Run Code Online (Sandbox Code Playgroud)
因此,如果用户试图找到输入" Pena Bainao "的地址,他找不到它,因为" Pena Bainao "与" Pe?a Baina "不同?"".
我们已经找到了一些肮脏的工作场所,但我想首先检查是否有人找到了更优雅的解决方案.
以下是一些未转换为US7ASCII的字符列表:
Character UTF8 Code Possible Equivalent
æ - u00E6 - ae
å - u00E5 - a
ã - u00E3 - a
ñ - u00F1 - n
õ - u00F5 - o
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
2)您还可以将NLS_SORT会话变量更改为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
Run Code Online (Sandbox Code Playgroud)
3)要放弃使用nlssort函数并更改所有内容的语义,还要设置nls_comp会话变量:
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
Run Code Online (Sandbox Code Playgroud)
选项1仅更改本地行为,即您想要不同结果的查询.选项2和3将改变其他查询的行为,可能不是您想要的.请参见" Oracle®数据库全球化支持指南"的表5-2.另请参阅" 使用语言索引 "部分以了解如何使用索引.