[转帖]Oracle中unicode的几种不同字符编码模式

发布时间 2024-01-09 11:58:33作者: 济南小老虎
https://zhuanlan.zhihu.com/p/668340691#

 

 

在Oracle中unicode字符集中,存在以下几种不同unicode字符集的编码模式

  • AL32UTF8
  • UTF8
  • AL16UTF16
  • UTF-16BE
  • UTF-16LE

下面讲一下它们的在Oracle一般都用在哪里以及有哪些限制?

字符编码方式描述
AL32UTF8(重点) 1、该字符编码模式是对UTF-8标准的实现,其为变长字符宽度,1~4个字节,包含了unicode字符集中补充字符(4字节);
2、通常在CREATE DATABASE时指定参数CHARACTER SET AL32UTF8作为该数据库字符集,该设定会将该数据库中char、varchar2、clob数据类型字段存储的字符编码为AL32UTF8。

3、兼容ASCII字符集,都是用1字节表示。
UTF8(已弃用) Oracle中该字符编码模式已被弃用。该字符编码并不是对UTF-8的标准实现,而是CESU-8的实现,其为变长字符宽度,字符宽度1~3个字节,不包含unicode字符集中的4字节补充字符。
AL16UTF16(重点) 1、该字符编码是用UTF-16BE(大端存储)存储模式实现标准的UTF-16,每个字符占用2或4字节存储,包含了unicode字符集中的补充字符(4字节);
2、该编码模式主要是用于CREATE DATABASE时指定参数 NATIONAL CHARACTER SET(国家字符集)AL16UTF16,该设定会将该数据库中nchar、nvarchar2、nclob数据类型字段的字符编码为AL16UTF16。
3、该字符集不能作为数据库字符集,也就是说CREATE DATABASE时指定参数CHARACTER SET AL16UTF16不支持。
4、不兼容ASCII字符集,用2字节表示ASCII中的字符。
UTF-16BE(了解) AL16UTF16的具体编码模式实现,即大端存储方式。不直接在Oracle中使用。
UTF-16LE(了解) UTF16小端编码模式实现,它是一个仅用于转换的字符编码模式,仅在SQL CONVERT或PL/SQL UTL_I18N.STRING_TO_RAW等字符集转换函数中有效。不直接在Oracle中使用。