神通数据库的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 'Testxxxxxx' 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和nvarchar的验证的更多相关文章

  1. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  2. 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本

    解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...

  3. sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  4. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

  5. varchar和Nvarchar区别

    http://www.cnblogs.com/yelaiju/archive/2010/05/29/1746826.html Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字 ...

  6. sql-char和varchar,nvarchar的区别

    数据类型的比较 char表示的是固定长度,最长n个字 varchar表示的是实际长度的数据类型 比如:如果是char类型,当你输入字符小于长度时,后补空格:而是varchar类型时,则表示你输入字符的 ...

  7. [转]varchar(n),nvarchar(n) 长度、性能、及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  8. sql server varchar和nvarchar的区别

    一.前言 在了解varchar 和nvarchar之前咱们先了解一下这些词的字面和常用意思,以方便我们更好的使用: SQL SERVER中生成的语句中,字符串前加N.N 前缀必须是大写字母.是Unic ...

  9. varchar(n),nvarchar(n) 长度、性能、及所占空间分析 nvarchar(64) nvarchar(128) nvarchar(256)(转)

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  10. 【转】CHAR CHARACTER VARCHAR NCHAR NVARCHAR NVARCHAR2区别

    http://blog.csdn.net/lhl6688/article/details/44156823?ref=myread oracle提供了五种字符数据类型:char.nchar.varcha ...

随机推荐

  1. 华为API战略:规范、组织和流程驱动企业大循环

    摘要:构建一套完善的API规范流程体系变得至关重要,用方法论驱动整个API变革,用API变革驱动共享经济模式,以共享模式反推数字化转型. 本文分享自华为云社区<API战略--华为在数字化浪潮下的 ...

  2. 华为云API中心:汇聚千行百业API资产,打造API全生命周期极致体验

    摘要:2022年11月9日,华为云全球生态部总裁康宁在华为全联接大会2022上发表"共创新价值,一切皆服务"主题演讲,并发布全新的华为云API中心. 本文分享自华为云社区<华 ...

  3. 重磅!KubeEdge单集群突破10万边缘节点|云原生边缘计算峰会前瞻

    摘要:<KubeEdge单集群突破10万边缘节点 | 技术报告>将会在6月25日即将开展的云原生边缘计算峰会(KubeEdge Summit 2022)中进行应用解析.我们先来一睹为快吧! ...

  4. U2Net基于ModelArts Notbook的仿真实验

    摘要:U2Net是一个优秀的显著性目标检测算法,由Qin Xuebin等人发表在Pattern Recognition 2020期刊[Arxiv].U2Net名称的来源在于其网络结构由两层嵌套的Une ...

  5. head/reset/revert/rebase代码回滚全解:git提交记录的背后原理

    多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,操作有: 回退(reset):reset是彻底回退到指定的commit版本,该commit后 ...

  6. 可视大盘 + 健康分机制,火山引擎 DataLeap 为企业降低资源优化门槛!

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数仓及研发技术团队维护的数据量大.资源使用量大.成本越高.优化压力越大.如何主动发现无效或低效使用的资源,并且 ...

  7. 火山引擎DataLeap的Data Catalog系统公有云实践 (上)

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 前言 Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解数的业 ...

  8. 火山引擎 DataLeap 构建Data Catalog系统的实践(一):背景与调研思路

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 Data Catalog 产品,通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解 ...

  9. Solon2 之基础:四、应用启动过程与完整生命周期

    串行的处理过程(含六个事件扩展点 + 两个函数扩展点),代码直接.没有什么模式.易明 提醒: 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了) AppBeanLoadEndEvent ...

  10. 错误: -source 1.7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    Modules 把 Language level 调成 8