Oracle vs PostgreSQL,研发注意事项(5)- 字符类型
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,本节介绍了Oracle和PG在字符类型上面的部分不同点,具体包括数据存储方式、实际占用的空间大小以及查询返回数据的处理方式等。一、不同点数据存储Oracle常规定义的长度,单位为Byte,如使用(N
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
asp上传服务器文件夹权限
网络安全保卫精神
有关网络安全的主题名称
如何判断数据库表有数据
创维软件开发
软件开发与测试维修
mysql数据库越来越大
庄洪林 网络安全
打印机连接数据库为什么出错
网络安全 产值 和营业比
数据库主键为什么不能为空
软件开发服务费账务
常见的数据库面试题
掌上宝宝服务器
ufsystem数据库索引
海南管理软件开发公司
矿机服务器配置要求
怎样开展服务器部署
看网络安全视频有感
深圳4年java软件开发
数据库中t
腾讯网络安全员做什么工作
中国软件开发突破
网络技术求助平台
数据库模板间关系
黑客保护网络安全的电影
我的世界服务器必备方块指令
服务器dns怎么设置
apex各个服务器互通吗
税控服务器管理客服电话