数据库中char, varchar, nvarchar的差异

1. char
     固定长度,最长n个字符。

2. varchar
     最大长度为n的可变字符串。
(n为某一整数,不同数据库,最大长度n不同)

char和varchar区别:
     varchar必char节省空间,但在效率上比char稍微差一些。
     说varchar比char节省空间,是因为varchar是可变字符串,比如:用varchar(5)存储字符串“abc”,只占用3个字节的存储空间,而用char(5)存储,则占用5个字节(“abc  ”)。
     说varchar比char效率稍差,是因为,当修改varchar数据时,可能因为数据长度不同,导致数据迁移(即:多余I/O)。其中,oracle对此多余I/O描述的表达是:“行迁移”(Row Migration)。

“行迁移”(Row Migration):
      “当一行的记录初始插入时是可以存储在一个block中的,由于更新操作导致行增加了,而block的自由空间已经完全满了,这个时候就产生了行迁移。在这种情况下,oracle将会把整行数据迁移到一个新的block中,oracle会保留被迁移的行的原始指针指向新的存放行数据的block,这就意味着被迁移行的ROW ID是不会改变的。"
     其中要解释一下:block是oracle中最小的数据组织与管理单位,是数据文件磁盘储存空间单位,也是数据库I/O最小单位(也就是说,读和写都是一个block打大小,所以如果block没满时,更新内容长度变更的varchar字段,和更新内容长度没变的varchar字段,I/O次数是一样,不存在额外消耗,只有在block满时,才会出现额外I/O,所以char和varchar性能之间的性能差异,是相当细微的,绝大多数情况下可以忽略不计,所以上文描述的“稍”差的含义)
     所以,我的开发经验是:“用varchar完全代替char吧,没什么好顾虑的”。

3. nvarchar
     nvarchar的特性,需要和varchar对比。
     nvarchar和varchar的不同主要是在对于数据的存储方式上:
     1). varchar:按字节存储数据
          varchar(6),最多能存储6个字节的数据,比如:“哈哈哈”,“abcdef”......
备注:一个中文字符在数据库里占多少个字节,要看unicode的编码方式,比如:utf8在mysql上占3个字节,sqlserver的Chinese_PRC_CI_AS占2个字节...
     2). nvarchar:按字符存储数据
          nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈",“abcdef”......
          nvarchar(m)最大存储的实际字节长度=n*m(n跟据编码方式而定),如果nvarchar存储的是英文字符,也是根据编码方式存储n的字节长度。也就是说,如果nvarchar存储英文字符,会浪费一半以上的存储空间....
总结:
     1. char和varchar的性能差距是很小的,可以考虑忽略不计。
     2. 在大数据量应用中,使用char和nvarchar有可能导致大量的存储空间的浪费。

 

参考文章:
Row Chaining and Row Migration
SQLSERVER char与varchar的性能测试》     

转载于:https://www.cnblogs.com/hyddd/archive/2012/03/05/2380702.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速转 TypeScript 指南

From:https://segmentfault.com/a/1190000040582994 TypeScript 教程:https://www.runoob.com/typescript/ts-tutorial.html TypeScript 入门教程:http://ts.xcatliu.com/ TypeScript 超详细入门教程(上):…

对一句正则表达式的理解

在《Python基础教程》的第198页上看到这样一句&#xff1a; re.sub(emphasis_pattern, r<em>\1</em>, Hello, *world*!) 其中&#xff1a;emphasis_pattern r\*([^\*])\* 结果为&#xff1a;Hello, <em>world</em>! 对emphasis_pattern r\*([^\*])\*…

城市大脑建设的3个误区,大脑模型的分歧是关键

作者&#xff1a;刘锋 互联网进化论作者 计算机博士城市大脑是目前智慧城市建设热门的概念&#xff0c;因该说这是一个在中国本土诞生的科技概念和技术模型&#xff0c;作为一个新的领域&#xff0c;城市大脑究竟如何建设&#xff0c;事实上存在了两种不同的发展路径&#xff0…

关于mysql修改密码后的问题

今天心血来潮&#xff0c;把连接mysql的密码改了&#xff0c;wampSever重启后就遇到“phpMyAdmin 试图连接到 MySQL 服务器&#xff0c;但服务器拒绝连接。您应该检查 config.inc.php 中的主机、用户名和密码&#xff0c;并且确定这些信息与 MySQL 服务器的管理员所给出的信息一…

JavaScript 和 typeScript 中的 import、from

From&#xff1a;https://segmentfault.com/a/1190000018249137?utm_sourcetag-newest Github - allowSyntheticDefaultImports should be the default?exports、module.exports和export、export deault到底是咋回事JavaScript 中有多种 export 的方式&#xff0c;而 TypeSc…

深度丨建立合资公司,深度参与运营:详解景驰的无人驾驶生意经

来源&#xff1a;亿欧摘要&#xff1a; 对于景驰科技而言&#xff0c;最终实现商业价值的做法绝对不仅仅是把改装好的无人车卖出高价。在该公司看来&#xff0c;切入无人驾驶需求最旺盛的出租车市场&#xff0c;与出行服务公司、主机厂乃至政府产业基金成立合资公司&#xff0c…

使用SQL Server存储ASP.NET Session变量

创建和配置ASP.NET Session状态数据库在基于NLB&#xff08;网络负载平衡&#xff09;环境下的ASP.NET Web应用程序开发&#xff0c;我们需要将Session存储在数据库中供多个Web应用程序调用&#xff0c;以下为配置方法及注意事项。1.创建用于存储ASP.NET Session的数据库&#…

Linux工具快速教程

From&#xff1a;https://linuxtools-rst.readthedocs.io/zh_CN/latest/index.html 博客&#xff1a;http://blog.me115.comGithub地址&#xff1a;https://github.com/me115/linuxtools_rst分为三个部分&#xff1a; 第一部分为基础篇&#xff0c;介绍我们工作中常用的工具的…

学界 | DeepMind想用IQ题测试AI的抽象思维能力,进展还不错

来源&#xff1a;大数据文摘摘要&#xff1a;抽象理解能力一直是人类引以为豪的智慧来源。阿基米德基于对物体体积的抽象理解&#xff0c;悟到了物体的体积与物体浮力之间的关系。这就是抽象推理的魔力。基于神经网络的机器学习模型取得了惊人的成绩&#xff0c;但是测量其推理…

frida hook so层、protobuf 数据解析

手机安装 app &#xff0c;设置代理&#xff0c;然后开始抓包。 发现数据没法解密&#xff0c;查看请求的 url 是 http://lbs.jt.sh.cn:8082/app/rls/monitor&#xff0c;使用 jadx 反编译 app 后搜索这个 url&#xff08;提示&#xff1a;可以只搜索 url 中一部分&#xff0c;…

PHP session的工作原理

PHP SESSION原理我们知道&#xff0c;session是在服务器端保持用户会话数据的一种方法&#xff0c;对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议&#xff0c;服务器响应完之后就失去了与浏览器的联系&#xff0c;最早&#xff0c;Netscape将cookie引入浏览器…

大数据技术与应用解读及案例分析(PPT)

来源&#xff1a;网络大数据摘要&#xff1a;大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。大数据就是未来的石油。未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学…

pywin32库 : Python 操作 windows 系统 API

Python 模块虽多&#xff0c;但也不可能满足所有需求。而且&#xff0c;模块为了便于使用&#xff0c;通常都封装过度&#xff0c;有些功能无法灵活使用&#xff0c;必须直接调用Windows API 来实现。要完成这一目标&#xff0c;有两种办法&#xff0c;一种是使用 C 编写 Pytho…

JVM内存管理:深入Java内存区域与OOM

Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙&#xff0c;墙外面的人想进去&#xff0c;墙里面的人却想出来。 概述&#xff1a; 对于从事C、C程序开发的开发人员来说&#xff0c;在内存管理领域&#xff0c;他们即是拥有最高权力的皇帝又是执行最基础工作的劳动…

华为秘密作战计划曝光,重注研发AI芯片挑战英伟达,轮值董事长挂帅

雷刚 问耕 发自 凹非寺 量子位 报道 | 公众号 QbitAI摘要&#xff1a;据报道&#xff0c;对于如何把AI引入所有业务&#xff0c;华为内部已经开启了代号为“达芬奇”的作战计划&#xff0c;并且成为华为高层每月一次讨论会的重点议题&#xff0c;也有不少华为高管以“D项目”来…

Python --- ctypes库的使用

ctypes 的官方文档 英文文档&#xff1a;https://docs.python.org/3/library/ctypes.html中文文档&#xff1a;https://docs.python.org/zh-cn/3.10/library/ctypes.html Python--ctypes(数据类型详细踩坑指南&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/145165873…

java单利模式写法

public class Something {private Something() {}private static class LazyHolder {public static final Something INSTANCE new Something();}public static Something getInstance() {return LazyHolder.INSTANCE;} } 这样的懒汉单例模式的实现&#xff0c;唯一的缺点是当…

机器学习近年来之怪现象

来源&#xff1a;网络大数据人工智能领域的发展离不开学者们的贡献&#xff0c;然而随着研究的进步&#xff0c;越来越多的论文出现了「标题党」、「占坑」、「注水」等现象&#xff0c;暴增的顶会论文接收数量似乎并没有带来更多技术突破。最近&#xff0c;来自卡耐基梅隆大学…

PySide6 : Qt for Python 教程

Qt for Python 教程&#xff1a;https://doc.qt.io/qtforpython/tutorials/index.html 官方文档示例&#xff1a;https://doc.qt.io/qtforpython/examples/index.html Qt for Python 提供了一系列带有演练指南的教程&#xff0c;以帮助新用户入门。 其中一些文档是从 C 移植到…

C语言scanf函数奇遇记

C语言scanf函数奇遇记 作者&#xff1a;ocean 撰写日期&#xff1a;2011-11-20 博客链接&#xff1a;http://oceanspace.tk 看《The C Programming Language》中关于scanf函数部分时随意敲了几行代码&#xff0c;本以为简单的不得了&#xff0c;都有点“不屑于”敲&#xff…