SQLServer的varchar与nvarchar的学习之二
SQLServer的varchar与nvarchar的学习之二
背景
昨天简单总结了多种数据库 varchar和nvarchar的区别与关系
今天想着能够分析一下数据库文件.
计划使用winhex 查看数据文件, 简单进行学习
过程
创建数据库和表,然后进行一些测试, 进行简单测试判断.
create database 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')
查询分析器的结果
| zhaobsh_varchar | zhaobsh_nvarchar |
|---|---|
| 赵XX测试三十个字符的情况 | 赵XX测试三十个字符的情况赵本帅赵XX |
| 123abc | 123abc |
| abcd赵XX1234 | abcd赵XX1234 |
| abcde??12345 | abcde??12345 |
| abcde??12345 | abcde한국12345 |
简单分析
nvarchar是字符数. 可以保存字符的个数
varchar是字节数, 汉字的话因为是GBK编码可能要除以2
chinese_prc的排序规则下 韩文是乱码显示.
使用 N开头存储到 nvarchar里面可以正常显示韩文.
但是需要SQL单独修改一下.
打开winhex进行查看
先分离数据库,然后复制数据库的数据文件出来.
使用winhex打开数据文件
第一部分 数字和英文:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0011C0B0 31 32 12
0011C0C0 33 61 62 63 31 00 32 00 33 00 61 00 62 00 63 3abc1 2 3 a b c
可以明显看到
varchar的 数字和英文字符, 都是一个字符使用一个字节进行保存.
nvarchar 使用的是两个字符进行保存,方式是后面补零.
并且可以看到字段的两个数据时仅仅仅挨着的.
地区看到 nvarchar 在存储ASCII字符时至少会浪费一倍的存储空间.
中文部分
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0011C0D0 31 00 61 62 63 1 abc
0011C0E0 64 D5 D4 XX XX XX XX 31 32 33 34 61 00 62 00 63 d赵XX1234a b c
0011C0F0 00 64 00 75 8D 2C 67 05 5E 31 00 32 00 33 00 34 d u ,g ^1 2 3 4
可以看到 :
varchar: D5 D4 XX XX XX XX 六个字节表示了 三个汉字.
nvarchar: 75 8D XX XX XX XX 应该也是六个字节表示了三个汉字.
通过百度发现 赵的 GBK编码其实是 D5D4, 明显 varchar使用GBK进行了存储.
另外发现 赵的 unicode编码是 8D75 也就是 nvarchar的字符存储方式.
所以明显可以看到, varchar 使用了 我这个数据库 Chinese_prc_ci_as的默认字符存储方式
但是当时使用nvarchar时 使用的就是 unicode的编码存储格式.
韩文部分
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0011C100 61 62 ab
0011C110 63 64 65 3F 3F 31 32 33 34 35 61 00 62 00 63 00 cde??12345a b c
0011C120 64 00 65 00 3F 00 3F 00 31 00 32 00 33 00 34 00 d e ? ? 1 2 3 4
0011C130 35 00 30 00 04 00 02 00 00 02 00 19 00 31 00 61 5 0 1 a
0011C140 62 63 64 65 3F 3F 31 32 33 34 35 61 00 62 00 63 bcde??12345a b c
0011C150 00 64 00 65 00 5C D5 6D AD 31 00 32 00 33 00 34 d e \誱? 2 3 4
0011C160 00 35 5
因为我想写的是韩文
只有N 开头的字段保存正常:
한국 的UNICDE 码为: D55C AD6D
可以看到数据库里面存储的也是: 5CD5 6DAD
比较符合预期.
也说明 nvarchar里面存的是 unicode 的字符 而不是utf-8的编码格式.
SQLServer数据库这一块的设置还是比较有意思的.
SQLServer的varchar与nvarchar的学习之二的更多相关文章
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...
- sqlserver varchar和Nvarchar区别
sql server中的varchar和Nvarchar有什么区别? 答:varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 ...
- sql-char和varchar,nvarchar的区别
数据类型的比较 char表示的是固定长度,最长n个字 varchar表示的是实际长度的数据类型 比如:如果是char类型,当你输入字符小于长度时,后补空格:而是varchar类型时,则表示你输入字符的 ...
- sql server varchar和nvarchar的区别
一.前言 在了解varchar 和nvarchar之前咱们先了解一下这些词的字面和常用意思,以方便我们更好的使用: SQL SERVER中生成的语句中,字符串前加N.N 前缀必须是大写字母.是Unic ...
- SQL中varchar和nvarchar的基本介绍及其区别
SQL中varchar和nvarchar的基本介绍及其区别 varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- varchar(n),nvarchar(n) 长度、性能、及所占空间的说明
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- varchar和Nvarchar区别
http://www.cnblogs.com/yelaiju/archive/2010/05/29/1746826.html Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字 ...
- [转]varchar(n),nvarchar(n) 长度、性能、及所占空间分析
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
随机推荐
- 【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)
目录 1. 环境准备 1.1 软件环境 1. 2 源码下载 2. CMake编译项目 2.1 创建cmake项目 2.2 设置编译配置 2.3 解决异常 2.3.1 文件下载异常 2.3.2 解决CU ...
- kafka源码阅读之MacBook Pro M1搭建Kafka2.7版本源码运行环境
原创/朱季谦 最近在阅读Kafka的源码,想可以在阅读过程当中,在代码写一些注释,便决定将源码部署到本地运行. 日常开发过程中,用得比较多一个版本是Kafka2.7版本,故而在MacBook Pro笔 ...
- CSS3学习笔记-字体属性
在CSS3中,可以使用字体属性来控制网页中文本的样式和排版.以下是常用的字体属性: font-family 该属性用于指定网页中的文本所使用的字体.我们可以通过使用通用的字体名称,或者直接使用字体名称 ...
- 中秋佳节,程序员教你AI三步成诗,秒变“李白”
摘要:举杯邀明月,用技术来附庸风雅. 中秋佳节来临之际,你是否开始思念远方的亲朋好友,想为他们送上祝福?又或是与家人团圆赏月之时,希望借一段风雅诗词抒情达意? 华为云的开发者们教你一招,来个技术风的A ...
- 如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!
摘要:在中国功夫中,"天下武功,无坚不摧,唯快不破",在编程的世界里,如何快速搭建一个属于自己的博客呢?那么 Pagic + Vercel 应该是个不错的选择!接下来,由Copy攻 ...
- 鸿蒙轻内核源码分析:MMU协处理器
摘要:本系列首先了解下ARM CP15协处理器的知识,接着介绍下协处理器相关的汇编指令,最后分析下MMU相关汇编代码. 本文分享自华为云社区<鸿蒙轻内核A核源码分析系列六 MMU协处理器> ...
- 火山引擎AB测试:广告实验深度打通巨量引擎,高效测试广告素材
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近期,火山引擎AB测试DataTester上线了新版的广告AB实验,还推出了与巨量引擎深度打通的能力.用户可以 ...
- 火山引擎DataLeap的Data Catalog系统公有云实践 (下)
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 Data Catalog公有云遇到的挑战 Data Catalog经历了一个从0到1在火山引擎公有云部署并逐步优化 ...
- 火山引擎 DataTester:5 个优化思路,构建高性能 A/B 实验平台
导读:DataTester 是由火山引擎推出的 A/B 测试平台,覆盖推荐.广告.搜索.UI.产品功能等业务应用场景,提供从 A/B 实验设计.实验创建.指标计算.统计分析到最终评估上线等贯穿整个 A ...
- Dependencies unknown
Dependencies unknown 由父POM 托管 <properties> <boot-admin.version>2.3.0</boot-admin.vers ...