Unicode编码方案主要有三个实施标准:
UTF-8
USC-2
UTF-16
如果开发的项目需要国际化,那么所选择的数据库必须提供Unicode编码支持.数据的Unicode化可以表示更多的字符,Oracle从7.2开始支提供Unicode编码支持。Oracle支持两种Unicode数据存储方法。
第一种被称为Unicode数据库解决方案,它可以创建一个基于Unicode的数据库,使用UTF-8编码格式,不仅为CHAR和VARCHAR2字符数据类型进行编码,而且还对所有的SQL名和字面值进行编码。为了实施Unicode数据库解决方案,将你的数据库字符集配置为AL32UTF8,这是UTF-8的Oracle名称。
另一种Unicode数据存储方法是Unicode数据类型解决方案,在该解决方案中UTF-16数据被保存在NCHAR、NVARCHAR和NCLOB等Unicode数据类型中。为了实施该解决方案,将你的国家字符集设置为AL16UTF16,这是UTF-16的Oracle名称。
一般情况下,UTF-8得到了更广泛的使用。
国际化项目开发时还要注意两种情况:
1.字符集转换
在b/s项目中,数据在不同阶段需要用不同的字符编码表示。从一种编码转换到另一种编码的过程就叫做字符集转换,在使用一种字符集的客户程序与使用另一种字符集存储数据的数据库通信时,最需要进行字符集转换.当数据从客户程序被发送到数据库时,就会进行字符集转换。
2.字符串处理
许多人认为,支持 UTF-8
数据库意味着将存储要求提高一倍或两倍,并且必须处理非常复杂的字符串处理。如果数据类型是char,varchar,text等,确实需要增加存储要求,但如果是非字符数据字段,如数字、日期、时间戳和二进制数据(如图像和文档)则不需要增加存储要求。
字符数据类型 (CHAR,
VARCHAR2,NCHAR,NVARCHAR2)的默认长度是指字节的长度
如果在表中定义一个数据类型为char(10)的字段,则指这个字段的默认长度是10个字节而非10个字符如果字符集设为ascii,那么一个字节就是一个字符.
如果字符集设为gb2312,那么两个字节才能保存一个字符.
下表是数据Unicode化后能保存的字符长度
UTF8 (1 to 3 bytes) AL32UTF8 (1 to 4
bytes) AL16UTF16 ( 2 bytes)
MIN
MAX
MIN
MAX
MIN
MAX
CHAR
2000
666
2000
500
N/A
N/A
VARCHAR2
4000
1333
4000
1000
N/A
N/A
NCHAR
2000
666
N/A
N/A
1000 1000
NVARCHAR2
4000
1333
N/A
N/A
2000 2000
(N/A 指不可能出现的情况)