Oracle数据库中文拼音排序问题,NLS_SORT设置
Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。
1、设置NLS_SORT参数值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
BINARY_CI 忽略大小写的排序
2、Session级别的设置,修改ORACLE字段的默认排序方式:
按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;
按笔画:alter session set nls_sort = SCHINESE_STROKE_M;
按偏旁:alter session set nls_sort = SCHINESE_RADICAL_M;
忽略大小写:alter session set nls_sort = BINARY_CI;
3、语句级别设置排序方式:
按照笔划排序
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
按照部首排序
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
按照拼音排序,此为系统的默认排序方式
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
忽略大小写
select * from dept order by nlssort(name,'NLS_SORT=BINARY_CI');
4、修改系统参数(数据库所在操作系统):
set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT (sh)
setenv NLS_SORT SCHINESE_RADICAL_M (csh)
HKLC\SOFTWARE\ORACLE\home0\NLS_SORT (win注册表)
5、设置查询时忽略大小写方法:
alter session set nls_sort='BINARY_CI';
alter session set nls_comp='LINGUISTIC';
Oracle 官方说明
NLS_SORT NLS_SORT specifies the collating sequence for ORDER BY queries. NLS_COMP NLS_COMP specifies the collation behavior of the database session.
Property
|
Description
|
Parameter type
|
String
|
Syntax
|
NLS_SORT = { BINARY | linguistic_definition }
|
Default value
|
Derived from NLS_LANGUAGE
|
Modifiable
|
ALTER SESSION
|
Range of values
|
BINARY or any valid linguistic definition name
|
- If the value is BINARY, then the collating sequence for ORDER BY queries is based on the numeric value of characters (a binary sort that requires less system overhead).
-
If the value is a named linguistic sort, sorting is based on the order of the defined linguistic sort. Most (but not all) languages supported by the NLS_LANGUAGE parameter also support a linguistic sort with the same name.
Note:
Setting NLS_SORT to anything other than BINARY causes a sort to use a full table scan, regardless of the path chosen by the optimizer. BINARY is the exception because indexes are built according to a binary order of keys. Thus the optimizer can use an index to satisfy the ORDER BY clause when NLS_SORT is set to BINARY. If NLS_SORT is set to any linguistic sort, the optimizer must include a full table scan and a full sort in the execution plan.
You must use the NLS_SORT operator with comparison operations if you want the linguistic sort behavior.
Property
|
Description
|
Parameter type
|
String
|
Syntax
|
NLS_COMP = { BINARY | LINGUISTIC | ANSI }
|
Default value
|
BINARY
|
Modifiable
|
ALTER SESSION
|
Basic
|
No
|
Values:
Normally, comparisons in the WHERE clause and in PL/SQL blocks is binary unless you specify the NLSSORT function.
Comparisons for all SQL operations in the WHERE clause and in PL/SQL blocks should use the linguistic sort specified in the NLS_SORT parameter. To improve the performance, you can also define a linguistic index on the column for which you want linguistic comparisons.
A setting of ANSI is for backwards compatibility; in general, you should set NLS_COMP to LINGUISTIC
符合NLS_SORT所有的值请在v$nls_valid_values视图中找
分享到:
相关推荐
在Oracle中,可以通过设置NLS_SORT参数为JAPANESE_JIS_X0208_1990或类似值来启用JIS排序。 3. **Unicode排序** Unicode排序规则遵循Unicode Collation Algorithm (UCA),它为全球所有语言提供了一致的排序方式。在...
在Oracle中,可以通过设置`NLS_SORT`参数来控制汉字的排序规则。该参数支持三种主要的汉字排序方式:拼音排序、笔画排序和部首排序。 1. **拼音排序**:通过设置`NLS_SORT=SCHINESE_PINYIN_M`来进行拼音排序。 - ...
此外,还可以通过设置会话级或系统级的`NLS_SORT`参数来自定义排序规则。 #### 六、总结 综上所述,在Oracle数据库中,通过使用`NLS_SORT`参数,可以方便地实现对中文数据按照拼音、部首或笔画进行排序的功能。这...
| NLS_SORT | BINARY | | NLS_TIME_FORMAT | HH.MI.SSXFFAM | | NLS_TIMESTAMP_FMT | DD-MON-RRHH.MI.SSXFFAM | | NLS_TIME_TZ_FMT | HH.MI.SSXFFAMTZR | | NLS_TS_TZ_FMT | DD-MON-RRHH.MI.SSXFFAMTZR | | NLS_DUAL...
这些函数兼容POSIX ERE,能在260个字符集中工作,包括Unicode和转换敏感的字符集,并根据NLS_SORT设置进行语言敏感的匹配。 Oracle 10g还引入了语言和字符集检测技术,如LCSSCAN和CSSCAN,它们可以识别文本的字符集...
通过设置NLS_SORT会话参数,可以指定不分大小写或不分重音的排序。例如,`ALTER SESSION SET NLS_SORT=BINARY_CI;` 将会启用不分大小写的排序。 正则表达式在Oracle 10g中也得到了增强,提供本地支持,允许在SQL和...
- `sort_rule`:指定排序规则的参数,如`'NLS_SORT=SCHINESE_PINYIN_M'`表示按照简体中文的拼音顺序进行排序,并且区分大小写(M表示区分大小写)。 **示例代码**: ```sql SELECT DEPTID, DEPTNAME FROM TDEPT ...
3. **按笔画排序**:对于按照汉字的笔画数排序,可以使用`NLS_SORT`参数设置为`SCHINESE_RADICAL_M`: ```sql select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_RADICAL_M'); ``` 4. **获取...
在Windows系统中,NLS_SORT参数可以通过修改注册表来设置,具体是在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\home0\NLS_SORT键值中进行修改。 需要注意的是,由于OCR扫描文档的过程可能存在识别错误或漏识别,以上内容...
- 示例:`SELECT NLS_INITCAP('ab cde') "test", NLS_INITCAP('a b c d e', 'nls_sort= SCHINESE_PINYIN_M') "test1" FROM dual;` 11. NLS_LOWER(chr, ['nls_param'])函数: - 作用:根据nls_param设定的排序方式...
- `SELECT NLS_INITCAP('zxt poi', 'NLS_SORT=Xdutch') FROM DUAL` 返回:'Zxt Poi' 6. NLS_LOWER函数: 语法:NLS_LOWER(string[, nlsparams]) 功能:将字符串中的所有字母转换为小写,非字母字符保持不变。...
在Oracle 9i及之后的版本中,新增了基于拼音、部首和笔画的排序功能,通过设置`NLS_SORT`参数来实现。 - `SCHINESE_RADICAL_M`:按照部首(第一顺序)、笔划(第二顺序)进行排序。 - `SCHINESE_STROKE_M`:按照...
可以通过`ALTER SESSION SET NLS_SORT=BINARY_CI`和`ALTER SESSION SET NLS_COMP=LINGUISTIC`来调整排序规则,使比较时不考虑字符集差异。 通过以上步骤,大部分情况下可以解决Oracle客户端PL/SQL的中文乱码问题。...
为了实现这一目标,Oracle提供了一系列内置函数和参数设置,其中最重要的是`NLS_SORT`参数及其相关的排序类型。 #### 二、NLS_SORT参数详解 `NLS_SORT`参数用于指定排序规则。在Oracle数据库中,可以通过以下三种...
例如,`NLS_LOWER('ABC')`返回'abc',而`NLS_LOWER('ABC', 'nls_sort=CHINESE_PINYIN_M')`可能会基于拼音将中文字符转换为小写。 12. NLSSORT(col, [nls_param])函数:此函数用于根据指定的NLS参数对字符串col进行...
SELECT NLS_INITCAP('hello world', 'NLS_SORT=GERMAN') FROM DUAL; -- 假设设置了德国排序 ``` ##### 6. **NLS_LOWER/NLS_UPPER** **语法:** `NLS_LOWER(string[, nlsparams])` 和 `NLS_UPPER(string[, nlsparams...
NLSSORT(name, 'NLS_SORT=SCHINESE_PINYIN_M'); ``` **结果:** ``` NAME ---------------- 不 就 仁 一 忠 众 周 作 ``` 在这个例子中,我们可以看到“不”排在第一位,接着是“就”,然后是“仁”等,这样的...
这种情况通常发生在远程 Oracle 数据库与本地 Oracle 数据库的字符集设置不一致的情况下。 在本案例中,远程 Oracle 数据库使用的字符集为 `AMERICAN_AMERICA.US7ASCII`,而本地 Oracle 数据库使用的字符集为 `...
例如,NLS_INITCAP('luo jia you', 'NLS_SORT=Chinese')将根据中文排序规则调整大小写。 8. REPLACE函数:REPLACE(string, search_str, replace_str)在string中找到所有的search_str子串,并用replace_str替换。...