暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片
深入比较Oracle的字符数据类型:CHAR、NCHAR、VARCHAR2和NVARCHAR2.pdf
575
14页
6次
2023-09-17
5墨值下载
深入比较Oracle的字符数据类型:CHARNCHARVARCHAR2NVARCHAR2
1、前言
Oracle数据库中,存储和处理字符数据是日常开发中的重要任务。而在字符数据类
型中,CHARNCHARVARCHAR2NVARCHAR2是常见的选择,但它们之间具有一些关键的
区别。了解这些区别对于正确选择和使用适当的字符数据类型至关重要。本文将深入比较
CHARNCHARVARCHAR2NVARCHAR2字符类型之间的区别,帮助大家理解它们的特性、
应用场景以及如何进行选择。
注:本文仅适用于Oracle 11.2.0.4.0
进入正文之前还是要先介绍下Unicode编码以及UTF-8GBK编码方式。
Unicode编码是一种用于字符表示的标准编码系统,它定义了每个符号的唯一数字标
识符,并且包含了全球范围内所有语言所需要的符号和文字,包括字母、数字、标点符
号、特殊符号和控制字符等。Unicode编码的目的是为了解决不同语言间字符集的互换问
题,使得全球范围内的计算机程序和数据都能够使用同一种标准编码方式来表示和交换文
本信息,从而实现跨语言平台的通用性和互通性。Unicode编码采用16位或32位的整数来
表示每个字符,因此可以表示超过100万种不同的字符。
UTF-8GBK16都是字符编码方式,用于将字符映射到计算机存储和表示的二进制数据。
1.字符范围:
UTF-8UTF-8是一种可变长度编码,能够表示Unicode字符集中的所有字符。它可以
表示全球范围内的字符,包括英文、中文、日文、韩文等各种语言文字。
GBK16GBK16是国标扩展字符集,主要用于中文字符的编码,能够表示中文汉字以
及少量其他语言的字符。
2.编码方式:
UTF-8UTF-8采用可变长度编码,使用14个字节来表示不同的字符。对于ASCII
符(0-127),UTF-8使用单字节表示,而非ASCII字符则使用多个字节表示,根据需要进
行扩展。
GBK16GBK16采用固定长度编码,使用双字节表示所有的字符。
3.兼容性:
UTF-8UTF-8是一种通用的字符编码方式,在国际化应用中被广泛使用,几乎支持
所有语言的字符编码。
GBK16GBK16主要用于中文环境,对于其他语言的字符支持较为有限。
4.字符表示大小:
UTF-8UTF-8编码的字符长度可变,对于大部分常用字符占用1个字节,而较少用到
的、罕见的字符占用2个或更多字节。
GBK16GBK16编码的字符长度固定,每个字符都占用2个字节。
5.总的来说,UTF-8是一种更为通用、灵活且兼容性较广的字符编码方式,适用于全球化
应用,而GBK16主要用于中文环境,对其他语言支持有限。
1
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2CHAR数据类型
2.1、数据类型定义
2.2、示例1-固定长度验证
CHAR [(size [BYTE | CHAR])]:
数据类型指定固定长度的字符串,长度字节或字符数据。最大值为 2000 字节或字符,默
认值和最小值为 1 字节。
如果存储的字符串长度少于指定的长度,Oracle会自动在字符串末尾填充空格字符,使其
达到指定长度。如果尝试插入的值对于列来说太长,则 Oracle 将返回错误。
//基于数据库字符集ZHS16GBK环境
SQL> select * from nls_database_parameters where parameter like
'%CHARACTERSET%';
PARAMETER VALUE
----------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> create table eg_char1(num number(5),a char(20));
SQL> insert into eg_char1 values (1,'');
SQL> insert into eg_char1 values (2,'你好');
SQL> insert into eg_char1 values (3,'你好hello');
SQL> insert into eg_char1 values (4,'hello');
SQL> insert into eg_char1 values (5,'hellodba');
SQL> insert into eg_char1 values (6,'helloDBA');
SQL> commit;
SQL> select num,a,lengthb(a) from eg_char1;
NUM A LENGTHB(A)
------ -------------------- ----------
1 20
2 你好 20
3 你好hello 20
4 hello 20
5 hellodba 20
6 helloDBA 20
//基于数据库字符集UTF8环境
1
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
of 14
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文档被以下合辑收录

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜