首页 > 数据库 >神通数据库的varchar和nvarchar的验证

神通数据库的varchar和nvarchar的验证

时间:2023-12-25 16:56:13浏览次数:38  
标签:varchar 61 赵赵 32 数据库 33 62 31 nvarchar

神通数据库的varchar和nvarchar的验证


登录神通数据库

isql

注意 神通数据库的默认密码是 szoscar55

Welcome to isql 2.0.56 interactive terminal, Client Default Encoding is UTF8.
Login time:2023-12-25 16:00:36

Password for default user:
Connect to:
神通数据库7.0.8.191204 for Linux(x86 64bit) (65535 connections) (license invalid after 74 days)
Using New Protocol. Database Encoding is GB18030.

Type: 'copyright' for distribution terms
      'help' or '\h' for help with SQL commands
      ';' for end with commands
      '!' to run system commands
      '@' to run sql script
      'exit' for quit

SQL=>


创建数据库相关

create tablespace zhaobsh datafile '/opt/ShenTong/odbs/OSRDB/zhaobsh.dbf' ;
create user zhaobsh  with password 'Test20131127'  default tablespace zhaobsh role sysdba;
isql -Uzhaobsh 重新登录数据库:

执行SQL: 
create table zhaobsh ( zhaobshvarchar varchar2(30), zhaobshnvarchar nvarchar2(30) ) ;
insert into zhaobsh values ('123abc','123abc') ;
insert into zhaobsh values ('1234赵abcd','1234赵abcd') ;
insert into zhaobsh values ('12345한국abcde','12345한국abcde') ;
insert into zhaobsh values ('123456한국abcdef',N'123456한국abcdef') ;

WINHEX解析

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

00025F70                                        31 32 33 34               1234
00025F80   35 36 83 36 84 33 82 37  F4 30 61 62 63 64 65 66   56????abcdef
00025F90   31 32 33 34 35 36 83 36  84 33 82 37 F4 30 61 62   123456????ab
00025FA0   63 64 65 66 2A 00 02 00  24 12 00 00 31 32 33 34   cdef*   $   1234
00025FB0   35 83 36 84 33 82 37 F4  30 61 62 63 64 65 31 32   5????abcde12
00025FC0   33 34 35 83 36 84 33 82  37 F4 30 61 62 63 64 65   345????abcde
00025FD0   1A 00 02 00 14 0A 00 00  31 32 33 34 D5 D4 61 62           1234赵ab
00025FE0   63 64 31 32 33 34 D5 D4  61 62 63 64 12 00 02 00   cd1234赵abcd    
00025FF0   0C 06 00 00 31 32 33 61  62 63 31 32 33 61 62 63       123abc123abc

ASCII

varchar:  31 32 33 61 62 63 
nvarchar: 31 32 33 61 62 63

与PG数据库一样, 虽然是GB18030的字符集 但是实际上还是存储的单字节的英文和数字.

中文

varchar:  31 32 33 34 D5 D4 61 62 63 64 
nvarchar: 31 32 33 34 D5 D4 61 62 63 64

与达梦数据库保持一致:
在中文的表现看来. varchar和nvarchar 其实是一直的
都是展示的 赵的 GBK的编码
赵	简体中文(GB2312、GBK)	gb2312	D5D4
需要注意 GB18030 和 GBK应该是兼容的:
赵	简体中文(GB18030)	GB18030	D5D4

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

韩文

varchar:  31 32 33 34 35 83 36 84 33 82 37 F4 30 61 62 63 64 65 
nvarchar: 31 32 33 34 35 83 36 84 33 82 37 F4 30 61 62 63 64 65

跟达梦数据库也是一样的
注意他存储的是: 
한국	简体中文(GB18030)	GB18030	83 36 84 33 82 37 F4 30

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

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

增加 N 的处理结果

varchar:  31 32 33 34 35 36 83 36 84 33 82 37 F4 30 61 62 63 64 65 66
nvarchar: 31 32 33 34 35 36 83 36 84 33 82 37 F4 30 61 62 63 64 65 66

与达梦数据库同字符集下面的表现也是一样的.
加不加没什么问题, 区别就是汉字作为双四节存储, 韩文是四字节存储. 英文数字是单字节存储.

长度限制验证

create table zhaobsh2 ( zhaobshvarchar varchar2(10), zhaobshnvarchar nvarchar2(10) ) ;
insert into zhaobsh2 values ('1234567890','1234567890') ;
正常插入
insert into zhaobsh2 values ('1234567890','12345678901') ;
insert into zhaobsh2 values ('123456789o1','123456789o') ;
上面两句都报错: 
ERROR, 字符串溢出, value too long for type character varying(10)

insert into zhaobsh2 values ('赵赵赵赵赵赵赵赵赵赵','赵赵赵赵赵赵赵赵赵赵') ;
正常插入
insert into zhaobsh2 values ('赵赵赵赵赵赵赵赵赵赵','赵赵赵赵赵赵赵赵赵赵济') ;
insert into zhaobsh2 values ('赵赵赵赵赵赵赵赵赵赵济','赵赵赵赵赵赵赵赵赵赵') ;
上面两句都报错: 
ERROR, 字符串溢出, value too long for type character varying(10)
insert into zhaobsh2 values ('한국한국한국한국한국','한국한국한국한국한국') ;
正常插入
insert into zhaobsh2 values ('한국한국한국한국한국국','한국한국한국한국한국') ;
insert into zhaobsh2 values ('한국한국한국한국한국','한국한국한국한국한국국') ;
上面两句都报错: 
ERROR, 字符串溢出, value too long for type character varying(10)

总结

在GB18030的字符集下面

varchar和nvarcahr 存储 中文 韩语  英文和数字是没有区别的 都是按照GB18030的编码进行填充. 
这一点与达梦一致. 

PG和MySQL存储的是UTF-8编码. 
ORACLE会乱码  SQLSERVER nvarchar 会存储unicode字符集的码字

关于字符长度
达梦 oracle  sqlserver  varcahr 是字节数
其他数据库 varcahr和nvarchar保持一致都是 字符数. 
感觉好不统一. 

标签:varchar,61,赵赵,32,数据库,33,62,31,nvarchar
From: https://www.cnblogs.com/jinanxiaolaohu/p/17926457.html

相关文章

  • 数据库论述题复习
    1.数据库的三级模式和两级映像架构对数据库系统有何重要意义三级模式视图层/外模式把现实世界信息按不同用户观点抽象为多个逻辑数据结构,每个逻辑结构称为视图每个视图称为数据库的一个子模式逻辑模式综合所有视图,把所有用户关心的现实世界抽象为逻辑模式描述数据......
  • 获奖名单公示|荣耀时刻,「第5届天池全球数据库大赛」决赛圆满收官
    日前,由阿里云主办、阿里云瑶池数据库和天池平台承办的“第五届天池全球数据库大赛”圆满收官。 历经过去4个多月的层层选拔,2大赛道20支队伍从7047支参赛战队中脱颖而出,成功晋级大赛决赛圈。最终,来自蔚来汽车等企业组队的「带对听花」队伍和来自北京大学&饿了么组队的「西二旗大......
  • ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证
    ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证背景周末分析了SQLServermysql等数据库想着继续分析一下oracle数据库这边oracle使用的是ZHS16GBK的字符集.所以比较特殊.还是建议得使用UTF-8字符集.能让系统干的活就让系统干,自己干国际化太费劲了.处......
  • 无法获得数据库 'model' 上的排他锁。请稍后重试该操作
    标题:MicrosoftSQLServerManagementStudio数据库"XXXX"的创建失败。(Microsoft.SqlServer.Smo)有关帮助信息,请单击:https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=15.0.18206.0+((SSMS_Rel).191029-2112)&EvtSrc=Microsoft.SqlServer.......
  • 达梦数据库varchar和nvarchar的验证
    达梦数据库varchar和nvarchar的验证测试SQLcreatetablespacezhaobshdatafile'/opt/dmdbms/data/DAMENG/zhaobsh.dbf'size128#需要注意达梦数据库的大小限制为:#第1行附近出现错误[-2422]:数据文件[/opt/dmdbms/data/DAMENG/zhaobsh.dbf]大小无效,取值范围为(128~671......
  • sql server 不同站点数据库操作
    https://www.cnblogs.com/zhaoyl9/p/11527090.htmlSELECT*FROM[120.76.111.111,1433].bole_data.dbo.ctm_infoSELECT*FROM[111.230.1111,1433].bole_data.dbo.ctm_infoINSERTINTO[120.76.111.111,1433].bole_data.dbo.ctm_infoSELECT*FROM[120.76.111.111,1433......
  • K8S_IPV6 POD与数据库联通方法以及快速网络调试的一个思路
    K8S_IPV6POD与数据库联通方法以及快速网络调试的一个思路背景前端时间搭建了一套K8SonlyIPV6SingleStack的测试环境因为自己长时间不搞K8S了,并且IPV6的搭建方法墙内的文档很不完整我这边仅是搭建了一套比较基本的K8S_calico_ingress的单栈IPV6的环境但是同事一直......
  • SyncNavigator(数据库同步软件)介绍以及使用说明
     SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER,MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windowsxp以上所有操作系统,适用于大容量数据库快速同步。安装包下载地址:https://www.syncnavigat......
  • 解决SQL SERVER 2022数据库的表中修改字段的数据类型后不能保存
    SQLSERVER2008数据库的表中修改字段的数据类型后,不能保存:启动MSSQLSERVER2008,选择菜单工具-〉选项-〉左侧有个设计器-〉表设计器和数据库设计器。然后去掉“阻止保存要求重新创建表的更改”前面的勾。重新启动MSSQLSERVER2008即可http://kangry.net/blog/?type=article&......
  • MYSQL varchar和nvarchar一些学习
    MYSQLvarchar和nvarchar一些学习背景先试用utfmb3的格式进行一下简单验证注意脚本都是一样的.createdatabasezhaobsh;usezhaobsh;createtablezhaobsh(zhaobshvarcharvarchar(30),zhaobshnvarcharnvarchar(30));insertintozhaobshvalues('123abc','1......