千家信息网

Oracle vs PostgreSQL,研发注意事项(5)- 字符类型

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本节介绍了Oracle和PG在字符类型上面的部分不同点,具体包括数据存储方式、实际占用的空间大小以及查询返回数据的处理方式等。一、不同点数据存储Oracle常规定义的长度,单位为Byte,如使用(N
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 伟宏互联网科技 广州大一互联网络科技有限公司 科技和互联网公司 朗新科技与工业互联网 腾讯阿里互联网科技 科技创新互联网企业 互联网科技汛 镁科技互联网资讯平台 太原新华互联网科技学校怎么样 昭通云南众福互联网科技有限公司 佳云科技和互联网广告 语蝶互联网科技有限公司 苏州铭阳互联网科技有限公司 工业互联网等科技实现智能化赋能 深圳互联网科技的发展 互联网科技实习生岗位 四川互联网展示科技馆设计 互联网科技快讯热点 互联网科技年终奖 互联网科技包装股份有限公司上市 苏州找大状互联网科技有限公司 科技互联网创业计划书 互联网金融和金融科技 新华互联网科技校企合作 宁波青枫互联网科技有限公司 苏州五指互联网络科技有限 威龙国际互联网科技公司 互联网科技资金流入 福州德业互联网科技 易租星互联网科技有限公司
0