视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle中的中文排序方式
2020-11-09 10:06:34 责编:小采
文档

测试中文排序的版本:

  SQL> select * from v$version;

  BANNER

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

  Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

  PL/SQL Release 11.1.0.6.0 - Production

  CORE 11.1.0.6.0 Production

  TNS for Linux: Version 11.1.0.6.0 - Production

  NLSRTL Version 11.1.0.6.0 - Production

  2. 创建测试表

  create table player (id number(16, 0), name varchar2(30));

  3. 检查字符集配置

  确认数据库字符集 american_america.AL32UTF8

  SQL> select name,value$ from pro$;

  NAME VALUE$

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

  DICT.BASE 2

  DEFAULT_TEMP_TABLESPACE TEMP

  DEFAULT_PERMANENT_TABLESPACE USERS

  DEFAULT_EDITION ORA$BASE

  Flashback Timestamp TimeZone GMT

  TDE_MASTER_KEY_ID

  DEFAULT_TBS_TYPE SMALLFILE

  NLS_LANGUAGE AMERICAN

  NLS_TERRITORY AMERICA

  NLS_CURRENCY $

  NLS_ISO_CURRENCY AMERICA

  NLS_NUMERIC_CHARACTERS .,

  NLS_CHARACTERSET AL32UTF8

  NLS_CALENDAR GREGORIAN

  NLS_DATE_FORMAT DD-MON-RR

  NLS_DATE_LANGUAGE AMERICAN

  NLS_SORT BINARY

  NLS_TIME_FORMAT HH.MI.SSXFF AM

  NLS_TIMESTAMP_FORMAT DDMON-RR HH.MI.SSXFF AM

  NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR

  NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR

  NLS_DUAL_CURRENCY $

  NLS_COMP BINARY

  NLS_LENGTH_SEMANTICS BYTE

  NLS_NCHAR_CONV_EXCP FALSE

  NLS_NCHAR_CHARACTERSET AL16UTF16

  NLS_RDBMS_VERSION 11.1.0.6.0

  GLOBAL_DB_NAME ORA11G

  EXPORT_VIEWS_VERSION 8

  WORKLOAD_CAPTURE_MODE

  WORKLOAD_REPLAY_MODE

  DBTIMEZONE 00:00

  32 rows selected.

  SQL>

  深入确认字符集

  SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,

  DECODE(TYPE#, 1,

  DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'),

  9,

  DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),

  96,

  DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),

  112,

  DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN

  FROM SYS.COL$

  WHERE CHARSETFORM IN (1, 2)

  AND TYPE# IN (1, 9, 96, 112);

  确认操作系统字符集设置

  [ora11g@bj55 ~]$ export NLS_LANG=american_america.al32utf8

  4. 填写测试数据

  。。

  SQL> insert into player values (17, '下午啦');

  1 row created.

  SQL> insert into player values (20, '八千米死亡线');

  SQL> set pagesize 60

  SQL> select * from player;

  ID NAME

  

  

   1 中文

  2 中文拼音

  3 笔画输入法

  4 一

  5 二

  6 三

  7 四

  8 五

  9 六

  10 七

  12 八1

  13 八2

  14 九1

  15 十

  16 测试啊

  17 下午啦

  20 八千米死亡线

  17 rows selected.

  SQL>

  5. 开始测试,发现三个查询语句返回的结果一致

  SQL> select * from player order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');

  ID NAME

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

  4 一

  15 十

  7 四

  10 七

  9 六

  8 五

  6 三

  3 笔画输入法

  13 八2

  14 九1

  12 八1

  5 二

  1 中文

  17 下午啦

  2 中文拼音

  16 测试啊

  20 八千米死亡线

  17 rows selected.

  SQL> select * from player order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');

  ID NAME

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

  4 一

  15 十

  7 四

  10 七

  9 六

  8 五

  6 三

  3 笔画输入法

  13 八2

  14 九1

  12 八1

  5 二

  1 中文

  17 下午啦

  2 中文拼音

  16 测试啊

  20 八千米死亡线

  17 rows selected.

  SQL> select * from player order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');

  ID NAME

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

  4 一

  15 十

  7 四

  10 七

  9 六

  8 五

  6 三

  3 笔画输入法

  13 八2

  14 九1

  12 八1

  5 二

  1 中文

  17 下午啦

  2 中文拼音

  16 测试啊

  20 八千米死亡线

  17 rows selected.

  

下载本文
显示全文
专题