Oracle vs PostgreSQL,研发注意事项(5)- 字符类型
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本节介绍了Oracle和PG在字符类型上面的部分不同点,具体包括数据存储方式、实际占用的空间大小以及查询返回数据的处理方式等。一、不同点数据存储Oracle常规定义的长度,单位为Byte,如使用(N
千家信息网最后更新 2025年11月07日Oracle vs PostgreSQL,研发注意事项(5)- 字符类型
本节介绍了Oracle和PG在字符类型上面的部分不同点,具体包括数据存储方式、实际占用的空间大小以及查询返回数据的处理方式等。
一、不同点
数据存储
Oracle
常规定义的长度,单位为Byte,如使用(N char)定义则为字符
如:
-- 以字节为单位,实际存储长度为字节数
create table t1(c1 varchar2(2));
-- 以字符为单位,实际存储长度与字符&字符集有关
-- 如GBK字符集,汉字字符2个字节,ASCII码1个字节,大小需根据实际的存储数据而定
create table t2(c1 varchar2(2 char)); -- 以字符为单位
PG
定义的长度,单位为字符
实际存储长度与字符&字符集有关,如UTF8字符集,汉字3个字节,ASCII吗1个字节,大小需根据实际的存储数据而定
查询返回数据
CHAR类型
Oracle返回实际存储的数据,包括数据库自动补足的空格;PG返回的数据会去掉后面的空格,不管是数据库自动补足的还是数据本身存在的空格.
空串
Oracle把空串视为NULL值,PG则不会.
二、测试数据
PG
UTF8字符集
testdb=# create table tbl1(var varchar(2),fixed char(2));CREATE TABLEtestdb=# insert into tbl1 values('测试','测试');INSERT 0 1testdb=# insert into tbl1 values('测1','测1');INSERT 0 1testdb=# insert into tbl1 values('测','测');INSERT 0 1testdb=# select lpad(var,2,'*'),octet_length(var),lpad(fixed,2,'*'),octet_length(fixed) from tbl1; lpad | octet_length | lpad | octet_length ------+--------------+------+-------------- 测试 | 6 | 测试 | 6 测1 | 4 | 测1 | 4 *测 | 3 | *测 | 4(3 rows)testdb=# create table tbl2(var varchar(4),fixed char(4));CREATE TABLEtestdb=# insert into tbl2 values('测试','测试 ');INSERT 0 1testdb=# select lpad(fixed,4,'*'),octet_length(fixed) from tbl2; lpad | octet_length --------+-------------- **测试 | 8(1 row)Oracle
GBK字符集
TEST-orcl@server4>create table tbl1(var varchar2(2),fixed char(2));Table created.TEST-orcl@server4>insert into tbl1 values('测试','测试');insert into tbl1 values('测试','测试') *ERROR at line 1:ORA-12899: value too large for column "TEST"."TBL1"."VAR" (actual: 4, maximum:2)TEST-orcl@server4>insert into tbl1 values('1','1');1 row created.TEST-orcl@server4>select lpad(var,2,'*'),lengthb(var),lpad(fixed,2,'*'),lengthb(fixed) from tbl1;LPAD LENGTHB(VAR) LPAD LENGTHB(FIXED)---- ------------ ---- --------------*1 1 1 2TEST-orcl@server4>create table tbl2(var varchar2(2 char),fixed char(2 char));Table created.TEST-orcl@server4>TEST-orcl@server4>insert into tbl2 values('测试','测试');1 row created.TEST-orcl@server4>insert into tbl2 values('1','1');1 row created.TEST-orcl@server4>select lpad(var,2,'*'),lengthb(var),lpad(fixed,2,'*'),lengthb(fixed) from tbl2;LPAD LENGTHB(VAR) LPAD LENGTHB(FIXED)---- ------------ ---- --------------测 4 测 4*1 1 1 2TEST-orcl@server4>select lpad(var,4,'*'),lengthb(var),lpad(fixed,4,'*'),lengthb(fixed) from tbl2;LPAD(VAR LENGTHB(VAR) LPAD(FIX LENGTHB(FIXED)-------- ------------ -------- --------------测试 4 测试 4***1 1 **1 2TEST-orcl@server4>
测试
字符
数据
存储
实际
字符集
字节
单位
长度
大小
空格
类型
不同
不同点
数据库
方式
空串
汉字
而定
有关
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
国家网络安全短视频
mc最疯狂服务器
服务器为啥都用2.5寸硬盘
江苏咨询软件开发系统
重庆特殊学校软件开发公司
哪个服务器暗黑2最便宜
当今网络安全的特点主要包括
宝德服务器管理密码重置
智慧门牌软件开发
CDN软件开发公司
公安局 网络安全
刺客信条服务器进不去
上海数据网络技术有哪些
三国战纪2不同服务器账号
如何加密数据库文件
网络安全竞赛6个方向
网络技术犯罪嫌疑人
网络技术平台使用合同
服务器连接电脑没反应
原神服务器出现未知错误
平安软件开发级别
mc最疯狂服务器
江西开票软件服务器地址
推荐的数据库管理oracle
联想数码库管理服务器
图书馆数据库怎么改名字
北京商城app开发软件开发
网络安全 与 保密的关系
无锡虹蚂蚁网络技术有限公司
汽车总网络技术