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. Not on FX application thread(八)

    Not on FX application thread(八) JavaFX 从入门到入土系列 当你不在主线程中操作UI时会出现以下异常: Not on FX application thread 可 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题

    文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题 四.证明:在最坏情况下,HEAPSORT 的时间复杂度是Ω (nlgn). 文心一言: 要证明在最坏情况下,HEAP ...

  3. Java PDF书签——添加、编辑、删除、读取书签

    概述 本文介绍通过Java程序来操作PDF书签,根据对书签的不同操作要求,分以下情况来介绍: 1. 添加书签(包括添加一级书签.多级子书签) 2. 编辑书签(包括重置书签标题.书签样式等) 3. 删除 ...

  4. 开发老人笔记:Git 常用命令清单

    摘要:git是目前世界上最先进的分布式版本控制系统. 多人协作 master:此分支用来发布稳定的代码,合并一般是由管理员合并 dev:此分支用于团队开发,团队成员向此分支提交代码 bug:此分支用于 ...

  5. Nacos 1.2.1 集群搭建(三) Nginx 配置 集群

    配置 Nginx 可以把.conf 文件拉到本地,配置好再传上去 #gzip on; upstream cluster{ server 192.168.0.113:8848; server 192.1 ...

  6. DevOps 运维提醒 钉钉 机器人 群通知

    应用系统在碰到运行异常等情况时,发送预警消息@群内相关人员,可以及时发出问题,观察对问题的响应情况 1. 创建一个群(可以是公司内部群) 2. 添加机器人 自定义机器人安全设置: https://op ...

  7. Cypress系列(1)-Window下安装Cypress并打开

    Cypress系列(1)-Window下安装Cypress并打开 系统要求 Cypress是一个被安装在你电脑上的桌面应用,你的操作系统需要满足如下条件才能正常安装 Mac OS 10.9+(仅提供6 ...

  8. Jmeter对各种接口类型的测试

    JMeter对各种类型接口的测试 默认做接口测试前,已经给出明确的接口文档(如,http://test.nnzhp.cn/wiki/index.php?doc-view-59):本地配好了JMeter ...

  9. Linux day3:⽹络不通排查流程 linux重要数据文件 系统优化相关 上传下载 文件权限 所属用户及用户组

    目录 ⽹络不通排查流程 linux重要数据文件 etc⽬录下重要的数据⽂件 usr⽬录下重要的数据⽂件 var⽬录下重要的数据⽂件 proc⽬录重要的数据⽂件 系统优化相关 环境变量 下载软件优化操作 ...

  10. Java的非法反射警告illegal reflective access operation

    反射是一项相当强大的特性,不仅在各类框架中被广泛应用,即使是在日常开发中我们也隔三差五得要和它打交道.然而在JDK9中JDK对反射加上了一些限制,需要注意. 考虑有如下的代码: import java ...