首页 > 数据库 >达梦数据库varchar和nvarchar的验证

达梦数据库varchar和nvarchar的验证

时间:2023-12-25 11:57:24浏览次数:35  
标签:00 varchar 33 32 62 63 FF nvarchar 达梦

达梦数据库varchar和nvarchar的验证


测试SQL

create tablespace zhaobsh datafile '/opt/dmdbms/data/DAMENG/zhaobsh.dbf' size 128
# 需要注意 达梦数据库的大小限制为:
# 第1 行附近出现错误[-2422]:数据文件[/opt/dmdbms/data/DAMENG/zhaobsh.dbf]大小无效,取值范围为(128~67108863)M.
重建用户
create user zhaobsh identified by  Testxxxx default tablespace  zhaobsh ;
grant dba to zhaobsh ; 

重建表等信息:
create table zhaobsh (zhaobshvarchar varchar(30),zhaobshnvarchar nvarchar(30)) ;
insert into zhaobsh values ('123abc','123abc') ;
insert into zhaobsh values ('abcd赵1234','abcd赵1234') ;
insert into zhaobsh values ('abcde한국12345','abcde한국12345') ;
insert into zhaobsh values ('abcde한국12345',N'abcde한국12345') ;

分析数据文件

SELECT CHECKPOINT(100);

据说可以将脏数据落盘, 先执行一下, 不然可能数据库里面没有插入的数据

需要注意 现代数据库都是写入log就是落盘成功
数据文件的更改要等待checkpoint 或者是开启关闭数据库时进行. 

winhex的分析

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

00080060                  86 00 32  33 61 62 63 86 31 32 33        ?23abc?23
00080070   61 62 63 01 00 00 00 00  00 FF FF FF FF 7F FF FF   abc       
00080080   F9 2E 00 00 00 00 00 2C  00 B2 00 62 63 64 D5 D4   ?     , ?bcd赵
00080090   31 32 33 34 8A 61 62 63  64 D5 D4 31 32 33 34 02   1234奱bcd赵1234 
000800A0   00 00 00 00 00 FF FF FF  FF 7F FF FF F9 2E 00 00         ?  
000800B0   00 00 00 3C 00 EE 00 62  63 64 65 83 36 84 33 82      < ?bcde???
000800C0   37 F4 30 31 32 33 34 35  92 61 62 63 64 65 83 36   7?12345抋bcde?
000800D0   84 33 82 37 F4 30 31 32  33 34 35 03 00 00 00 00   ???12345     
000800E0   00 FF FF FF FF 7F FF FF  F9 2E 00 00 00 00 00 3C     ?     <
000800F0   00 FF FF 62 63 64 65 83  36 84 33 82 37 F4 30 31    bcde????1
00080100   32 33 34 35 92 61 62 63  64 65 83 36 84 33 82 37   2345抋bcde???
00080110   F4 30 31 32 33 34 35                               ?12345

简要分析-ASCII

1. ASCII的编码
感觉达梦数据库比较奇怪, 他的行首的第一个信息应该是有一个其他的作用, 所以第一个我总是找不到在哪里. 
86 00 32 33 61 62 63 86 31 32 33 61 62 63  
感觉86 就像是一个风恶魔, 表示行的分割
但是第一列的00 我理解不太了. 
但是可以看到在ASCII 里面 varchar和 nvarchar 其实表示是一样的 都是一个字节一个汉字. 

简要分析-中文

B2 00 62 63 64 D5 D4 31 32 33 34 
8A 61 62 63 64 D5 D4 31 32 33 34
在中文的表现看来. varchar和nvarchar 其实是一直的
都是展示的 赵的 GBK的编码
赵	简体中文(GB2312、GBK)	gb2312	D5D4
需要注意 GB18030 和 GBK应该是兼容的:
赵	简体中文(GB18030)	GB18030	D5D4

说明 varchar 和 nvarchar 都是 ASCII 占用一个字节, 中文占用两个字节. 

简要分析-韩文

EE 00 62 63 64 65 83 36 84 33 82 37 F4 30 31 32 33 34 35 
92 61 62 63 64 65 83 36 84 33 82 37 F4 30 31 32 33 34 35

注意他存储的是: 
한국	简体中文(GB18030)	GB18030	83 36 84 33 82 37 F4 30

因为我选择的是 GB18030的数据库字符集 所以韩文明显存储的就是 GB18030的信息
需要说明的是
韩文是 四字节的 编码. 
所以 两个韩文其实使用了 8个字节进行存储

同事也说明. 
不管是varchar 和 nvarchar 在进行 韩文的存储时也是一样的. 

插入是增加 N 的效果

FF FF 62 63 64 65 83 36 84 33 82 37 F4 30 31 32 33 34 35 
92 61 62 63 64 65 83 36 84 33 82 37 F4 30 31 32 33 34 35

跟上面一个一样,其实达梦数据库不管带不带 N 都是一样的进行存储, 基本上是没有问题的. 

总结

感觉虽然达梦和Oracle的语法很像.
但是感觉他对varchar和nvarchar的处理与 MySQL是很相似的. 

多种使用方法下其实是一致的体验. 
GB18030其实也是一个很好的字符集, 至少东亚圈的部分显示都可以做到.
国际化更加深远的部分就不得而知了

过段时间学习下一年GB18030的编码详细情况. 

标签:00,varchar,33,32,62,63,FF,nvarchar,达梦
From: https://www.cnblogs.com/jinanxiaolaohu/p/17925794.html

相关文章

  • MYSQL varchar和nvarchar一些学习
    MYSQLvarchar和nvarchar一些学习背景先试用utfmb3的格式进行一下简单验证注意脚本都是一样的.createdatabasezhaobsh;usezhaobsh;createtablezhaobsh(zhaobshvarcharvarchar(30),zhaobshnvarcharnvarchar(30));insertintozhaobshvalues('123abc','1......
  • SQLServer的varchar与nvarchar的学习之二
    SQLServer的varchar与nvarchar的学习之二背景昨天简单总结了多种数据库varchar和nvarchar的区别与关系今天想着能够分析一下数据库文件.计划使用winhex查看数据文件,简单进行学习过程创建数据库和表,然后进行一些测试,进行简单测试判断.createdatabasezhaobshc......
  • 凡是有但是-varchar和nvarchar的初步学习之一
    凡是有但是-varchar和nvarchar的初步学习之一背景高应用开发,在涉及到国内国外的问题时,重要的事情有两个:时区转换,字符集转换.时区转换虽然是很难理清楚,各种规范不统一的事情但是字符集转换更加扯淡.如果是一种数据库,一种字符集可能还好说现在面临的是多种数......
  • 达梦数据库常用SQl语句
    1.创建表空间语句1createtablespace"表空间名"datafile'数据文件路径/表空间名.DBF'size256(初始大小)autoextendonmaxsize67108863P(设置自动增长)CACHE=NORMAL;2.创建用户1CREATEUSER"用户名"IDENTIFIEDBY"密码"HASHWITHSHA512NOSALTPASS......
  • 达梦数据库V8 命令行静默安装
    unzipdm8_20230420_x86_kylin10_64.zipmount-oloop-tiso9660dm8_20230420_x86_kylin10_64.iso/mnt/ulimit-HSn65535groupadddinstalluseradd-gdinstall-m-d/home/dmdba-s/bin/bashdmdbapasswddmdbamkdir/data/dm8chown-Rdmdba:dinstall/......
  • php+dm达梦数据库简单连接
    1.安装php准备php环境,下载phpstudy,自带php7.3.4nts,安装好以后如果系统环境变量没有配置要配置一下php的的系统环境变量2.安装达梦数据库win64+dmv8在达梦数据库的文件夹中选择合适版本的扩展文件复制到达梦的各版本扩展文件所在位置:php的扩展文件中php的扩展文件: 配置p......
  • 达梦数据库重新初始化
    1.删除原数据库实例服务进入数据库安装目录./script/root/dm_service_uninstaller.sh-nDmServicedmdbDmServicedmdb是数据库实例的默认名称忘记名称可以在系统服务下查询Dm相关service2.删除数据库目录rm-rf/data/dm-data/DAMENG/*3.创建数据库实例切换到达梦用......
  • 麒麟ARM系统 - 双机达梦8主备搭建
    环境说明1.1硬件需求至少需要三台服务器,1主、1从、1监视器。由于资源有限,将监视器安装在主库机器上,本次实验使用2台虚拟机。操作系统:麒麟arm64服务器版V10uname-r4.19.90-17.ky10.aarch64master节点:192.168.1.175backup节点:192.168.1.1761.2网络需求心跳I......
  • 达梦数据库,使用存储过程切分','分隔字段,生成多条数据
      CREATEORREPLACEPROCEDUREsplit_listASv_nameVARCHAR2(255);v_listVARCHAR2(255);v_valueVARCHAR2(255);v_posNUMBER;v_lengthNUMBER;BEGINFORrecIN(SELECTZLY_NAME,LIST_IDFROMyour_table)LOOPv_name:=re......
  • 记录达梦8安装过程与一些注意事项
    最近项目中使用到达梦数据库(开发版),安装时总是忘记一些比较重要的,常用的参数,所以记录一下.环境:CPU:鲲鹏arm64系统:银河麒麟服务器版V10SP3下载达梦数据库打开达梦数据库下载页(可能需要登录)找到DM8开发版,需要选择安装的机器的CPU平台和系统,再点击下载......