PG数据库存储验证


背景

最近学习了SQLServer数据库的varchar和nvarchar的存储
想到PG数据库其实没让选择字符集,也没有nvarchar
所以想学习一下nvarchar的使用情况

建表以及插入sql

su - postgres
psql
create database zhaobsh
\c zhaobsh
create table zhaobsh(zhaobsh varchar(30));
插入数据
insert into zhaobsh values ('123abc');
insert into zhaobsh values ('abcd赵1234');
insert into zhaobsh values ('abcde한국12345'); 查看文件对应
select oid from pg_class where relname='zhaobsh' 下载文件到本地

下载winhex以及使用

https://www.lanzoux.com/iQBXbfxq8na

找了一个非官方的地址

下载直接打开文件就可以:

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00001FA0      61 62 63 64 65 ED 95  9C EA B5 AD 31 32 33 34    abcde頃滉淡1234
00001FB0 35 00 00 00 00 00 00 00 6E 31 00 00 00 00 00 00 5 n1
00001FC0 00 00 00 00 00 00 00 00 02 00 01 00 02 08 18 00
00001FD0 19 61 62 63 64 E8 B5 B5 31 32 33 34 00 00 00 00 abcd璧?234
00001FE0 6D 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 m1
00001FF0 01 00 01 00 02 08 18 00 0F 31 32 33 61 62 63 00 123abc 发现PG数据库跟SQLServer不一样他是逆序存放的.
第一个:
123abc 都是单字节使用 第二个:
然后是 abcd加上一个中文字符. 1234
E8 B5 B5
网上可以查到:
赵 Unicode (UTF-8) utf-8 E8B5B5
符合预期,但是使用了 3个字节的存储大小. 第三个:
ED 95 9C EA B5 AD
한국 Unicode (UTF-8) utf-8 ED959CEAB5AD 发现韩文其实也是 三个字节的存储 在UTF-8的里面 注意我这个选择的是:
https://www.haomeili.net/Code/DetailCodes
网站还是非常好的.

字段长度验证

zhaobsh=#  insert into zhaobsh values ('赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵');
INSERT 0 1
zhaobsh=# insert into zhaobsh values ('赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵赵');
ERROR: value too long for type character varying(30)
zhaobsh=# 说明PG 其实是存储的是字符长度而不是字节长度

金额类型的验证

create table zhaobsh2 (zhaobsh2 decimal(19,3));
insert into zhaobsh2 values (1.1) ;
继续分析
发现原始的文件里面存放的全是 0 不知道decimal 到了哪个地方了. 第二次测试:
create table zhaobsh3 (zhaobsh31 varchar(10),zhaobsh32 decimal(19,3));
insert into zhaobsh3 values ('12345',9.999); 分析应该是:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00001FF0 31 32 33 34 35 0F 80 81 09 00 06 27 00 00 00 12345 € ' 怀疑是这几位数字表示了9.999
0F 80 81 09 00 06 27 00 00
为了继续验证.
我将金额填充满.
注意可以是 16位金额数.
insert into zhaobsh3 values ('1234567',9999999999999999.999); 显示为:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00001F60 31 32 33 34 35 36 37 1B 83 81 0F 27 0F 27 0F 1234567 ? ' '
00001F70 27 0F 27 06 27 00 00 00 76 31 00 00 00 00 00 00 ' ' ' v1
00001F80 00 00 00 00 00 00 00 00 03 00 02 00 02 08 18 00
00001F90 0F 感觉后面很多位数都在进行金额的展示, 但是具体不太好判断. 理论上 decimail 使用四个字节表示 9个数字. 19,3的精度应该至少需要9个字节.
所以理论上应该是从 37 之后数 9个字节:
所以怀疑如下数字表示了 插入的数字 Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00001F60 1B 83 81 0F 27 0F 27 0F ? ' '
00001F70 27 0F 27 06 27 00 00 00 76 31 ' ' ' v1 但是没太有具体的证据 , 今天已经很晚了, 想先休息改天继续研究.

PG数据库存储验证的更多相关文章

  1. 更改Mysql数据库存储位置的具体步骤

    首先把mysql的服务先停掉,更改MySQL配置文件My.ini中的数据库存储主路径,将老的数据库存储主路径中的数据库文件和文件夹复制到新的存储主路径,接下来重启搞定     一.首先把mysql的服 ...

  2. edgedb 内部pg 数据存储的探索 (二) 创建数据库命令说明

    前面已经创建好了一个简单可以访问pg 的edgedb 环境,现在测试几个数据库操作命令在pg 的存储 创建数据库 连接环境 注意账户是按照上次创建的环境配置 edgedb -u edgedb 创建数据 ...

  3. Ocelot简易教程(七)之配置文件数据库存储插件源码解析

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...

  4. Python3编写网络爬虫12-数据存储方式五-非关系型数据库存储

    非关系型数据库存储 NoSQL 全称 Not Only SQL 意为非SQL 泛指非关系型数据库.基于键值对 不需要经过SQL层解析 数据之间没有耦合性 性能非常高. 非关系型数据库可细分如下: 键值 ...

  5. Python3编写网络爬虫11-数据存储方式四-关系型数据库存储

    关系型数据库存储 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表保存的,所以它的存储方式就是行列组成的表.每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系, ...

  6. 第15课-数据库开发及ado.net-数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库

    第15课-数据库开发及ado.net 数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库 1.  学习方法 2.  多涨见识 3.  比自己强的人一起,学习更强:比自己更聪明的人 ...

  7. 更改Mysql数据库存储位置

    默认安装位置 C:\Program Files\MySQL\MySQL Server 5.7 一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开MyS ...

  8. [转帖]分享一份珍藏多年的PG数据库部署架构图

    分享一份珍藏多年的PG数据库部署架构图 记得同事曾经测试过citus https://www.toutiao.com/i6710613553277043213/ 原创 波波说运维 2019-07-11 ...

  9. 修改mysql中数据库存储主路径

    一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开文件夹C:\ProgramData\MySQL\MySQL Server 5.7中的my.ini文件 ...

  10. 修改mysql数据库存储路径

    最近一段比较忙,所以一直没有及时的更新总结一下测试路上遇到的问题,今天先来分享一下如何修改mysql存储路径(场景:在自己电脑上搭建的服务器上安装mysql,二.在公司自己的服务器上搭建mysql数据 ...

随机推荐

  1. 新报: 根据IP获取物理地址不需要调用接口啦

    一. 复制data文件夹到自己的项目当中 可以进行加载到这个文件即可 博主放入在项目的根目录当中 请移步Gitee pull 该文件 https://gitee.com/yangbuyi/ip_fil ...

  2. 微服务架构下,DLI的部署和运维有何奥秘?

    摘要:探讨DLI两个问题:如何在生产环境中部署与运维实现快速迭代上线,如何实现监控告警来提升整体运维能力. 华为云数据湖探索DLI是支持多模引擎的Serverless大数据计算服务,其很好的实现了Se ...

  3. 华为云数据治理生产线DataArts,让“数据‘慧’说话”

    摘要:数据治理生产线DataArts改变了传统"人拉肩抗"的数据处理方式,帮助提升效率:降低技术门槛,让"人人都是分析师":让"数据'慧'说话&quo ...

  4. 云图说|ROMA演进史:一个ROMA与应用之间不得不说的故事

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云ROMA源 ...

  5. Hive查看表/分区更新时间

    1.查看分区 hive> show partitions table_name; 2.查看分区更新时间 获取hdfs路径 hive> desc formatted table_name; ...

  6. Flutter加固原理及加密处理

    ​ 引言 为了保护Flutter应用免受潜在的漏洞和攻击威胁,加固是必不可少的措施之一.Flutter加固原理主要包括代码混淆.数据加密.安全存储.反调试与反分析.动态加载和安全通信等多个方面.通过综 ...

  7. 火山引擎工具技术分享:用 AI 完成数据挖掘,零门槛完成 SQL 撰写

      更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 文 / DataWind 团队封声 在使用 BI 工具的时候,经常遇到的问题是:"不会 SQL 怎么生产加工 ...

  8. 动作捕捉系统验证OPT追踪井下无人机的性能

    井下无人机长时间在恶劣环境下执行勘测.救援任务,通讯系统可能会陷入两难的境地--传输高精度坐标伴随着大量耗能.为解决这项难题,中国矿业大学计算机科学和技术学院陈朋朋教授团队提出了一种基于超宽带(UWB ...

  9. VWAP 订单的最佳执行方法:随机控制法

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 引言:相关研究 在当今的投资领域,算法交易正迅速成为客户获取和清算股票头寸的首选方法. 通常,被委托者会 ...

  10. MB01 BAPI_GOODSMVT_CREATE退货

    "-----------------------------------------@斌将军--------------------------------------------DATA: ...