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

达梦数据库varchar和nvarchar的验证

时间:2024-01-03 14:07:00浏览次数:55  
标签: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://blog.51cto.com/u_11529070/9084308

相关文章

  • ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证
    ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证背景周末分析了SQLServermysql等数据库想着继续分析一下oracle数据库这边oracle使用的是ZHS16GBK的字符集.所以比较特殊.还是建议得使用UTF-8字符集.能让系统干的活就让系统干,自己干国际化太费劲了.处理思路使......
  • MYSQL varchar和nvarchar一些学习
    MYSQLvarchar和nvarchar一些学习背景先试用utfmb3的格式进行一下简单验证注意脚本都是一样的.createdatabasezhaobsh;usezhaobsh;createtablezhaobsh(zhaobshvarcharvarchar(30),zhaobshnvarcharnvarchar(30));insertintozhaobshvalues('123abc','123ab......
  • SQLServer的varchar与nvarchar的学习之二
    SQLServer的varchar与nvarchar的学习之二背景昨天简单总结了多种数据库varchar和nvarchar的区别与关系今天想着能够分析一下数据库文件.计划使用winhex查看数据文件,简单进行学习过程创建数据库和表,然后进行一些测试,进行简单测试判断.createdatabasezhaobshcreateta......
  • 凡是有但是-varchar和nvarchar的初步学习之一
    凡是有但是-varchar和nvarchar的初步学习之一背景高应用开发,在涉及到国内国外的问题时,重要的事情有两个:时区转换,字符集转换.时区转换虽然是很难理清楚,各种规范不统一的事情但是字符集转换更加扯淡.如果是一种数据库,一种字符集可能还好说现在面临的是多种数据库:......
  • Python 安装达梦数据库的问题怎么弄 DPI ?
    如果您想在Python中安装并使用达梦数据库,请按照以下步骤进行:安装DPI(达梦Python接口):您需要首先安装DPI,它是Python与达梦数据库之间的驱动程序。您可以从达梦官方网站下载并安装适用于您的操作系统的DPI。安装Python的数据库接口模块:在Python中使用达梦数据库,您需要安装相应的数据......
  • MySQL对所有的表增加一个biz_e varchar255,如何快速实现?
    --先在数据库中创建一个存储过程DELIMITER//--先在数据库中创建一个存储过程DELIMITER//CREATEPROCEDUREAddBizEToTables()BEGINDECLAREdoneINTDEFAULT0;DECLAREtableNameVARCHAR(255);DECLAREcurCURSORFORSELECTtable_name......
  • 达梦数据库触发器begin报错
    达梦数据库建立了如下触发器CREATE TRIGGERHLHTMD_QY_ORGBEFOREUPDATE OFSTATEON IPSBTQYFOREACHROW WHEN(NEW.STATE='2') BEGIN IFEXISTS( SELECT* FROM MD_QY_ORG WHERE CODE=NEW.CODE) BEGIN--------报错位置 UPDATE MD_QY_ORG......
  • 达梦数据对比工具的部署与使用
    1、拷贝达梦软件bin目录到Oracle服务器(root用户)压缩Linuxrh6x86版本的达梦数据库bin目录,例如压缩文件为dmbin.tar.gz,将文件拷贝到Oracle服务器指定目录并解压(如:/home/oracle/dmbin),给目录/home/oracle/dmbin授予相关权限和用户组chown-Roracle:oinstall/home/oracle/dmbin2、配......
  • 神通数据库的varchar和nvarchar的验证
    神通数据库的varchar和nvarchar的验证登录神通数据库isql注意神通数据库的默认密码是szoscar55Welcometoisql2.0.56interactiveterminal,ClientDefaultEncodingisUTF8.Logintime:2023-12-2516:00:36Passwordfordefaultuser:Connectto:神通数据库7.0......
  • ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证
    ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证背景周末分析了SQLServermysql等数据库想着继续分析一下oracle数据库这边oracle使用的是ZHS16GBK的字符集.所以比较特殊.还是建议得使用UTF-8字符集.能让系统干的活就让系统干,自己干国际化太费劲了.处......