数据库 — char、varchar、varchar2区别

数据库 — char、varchar、varchar2区别char、varchar、varchar2区别char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。char定长存储,速度快,但是存在一定的空间浪费,适用于字段不是很大,对速度要求高的场合。速度快是因为其在物理上是按定长存储的,这样,就可以根据偏移址一次取出固定长度的字符。varchar变长存储,效率不如char。…

大家好,又见面了,我是你们的朋友全栈君。

char、varchar、varchar2区别

char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。

  • char 定长存储,速度快,但是存在一定的空间浪费,适用于字段不是很大,对速度要求高的场合。速度快是因为其在物理上是按定长存储的,这样,就可以根据偏移址一次取出固定长度的字符。

  • varchar 变长存储,效率不如char。varchar在存储时,在物理上要先存储该字段的实际长度,然后才是内容。这样读取的时候,就要读取两次,一次读它的长度,然后才是内容。所以它的访问速度会比char慢一些。但它可以节省空间。 

由于mysql自身的特点,如果一个数据表存在varchar字段,则表中的char字段将自动转为varchar字段。在这种情况下设置的char是没有意义的。所以要想利用char的高效率,要保证该表中不存在varchar字段;否则,应该设为varchar字段。

SQL中char、varchar、text和nchar、nvarchar、ntext的区别

1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。

我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。


char、nchar、varchar、nvarchar、text、ntext我们选择哪一种?

数据库定义到char类型的字段时,大家也许会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?

一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间,而且处理起来会快些,无法定长只好选用定长,并且将长度设置尽可能地小;

另一种是则是觉得无所谓,尽量用可变类型的,长度尽量放大些。

鉴于现在硬件像萝卜一样便宜的大好形势,纠缠这样的小问题实在是没多大意义,不过如果不弄清它,总觉得对不起劳累过度的CPU和硬盘。


总结:

1、如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
2、能确定长度又不一定是ansi字符或者,那么用nchar;
3、不确定长度,要查询且希望利用索引的话,用nvarchar类型吧,将它们设到400;
4、不查询的话没什么好说的,用nvarchar(4000)
5、性格豪爽的可以只用3和4,偶尔用用1,毕竟这是一种额外说明,等于告诉别人说,我一定需要长度为X位的数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150762.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm如何远程连接服务器_py服务端软件

    pycharm如何远程连接服务器_py服务端软件通过pycharm远程连接服务器首先确定你连接服务器的方式软件准备验证软件是否安装成功pycharm远程连接服务器上传自己的project到Ubuntu上传完以后,开始给自己的项目配置服务器的python解释器如何使用路由器,开启外网映射通过路由器的底部的网址进入管理员页面选择应用管理进入虚拟服务器在虚拟服务器中添加需要把内网映射到外网的IP地址查看自己映射出去的外网IP地址至此大功告成!!!您可以通过外网来访问您学校的服务器啦!首先确定你连接服务器的方式一般连接服务器需要服务器的ip地址,IP地址分为

    2022年8月28日
    0
  • 《Python源码剖析》学习笔记

    《Python源码剖析》学习笔记最近阅读《Python源码剖析》一书,对python底层实现有了更为深刻的理解,特在此记录学习笔记。共有六篇笔记,原文发表在PythonTip。Python源码剖析笔记—第一章:Python对象初探Python源码剖析笔记—-第二章:初识PyIntObjectpython源码剖析笔记—PyListObjectpython源码剖析笔记—Dic

    2022年8月23日
    5
  • 什么是 Promethues | 普罗米修斯( 集群监控系统 )

    什么是 Promethues | 普罗米修斯( 集群监控系统 )Promethues监控系统Prometheus是个啥Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是GoogleBorgMon监控系统的开源版本。监控系统什么是监控系统1、监控系统在这里特指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警2、随着技术不断迭代,越来越复杂的数据中心环境对监控系统提出了更越来越高的要求:需要监控不同的对象,例如容器,分布式存储,SDN网络,分布式系统

    2022年7月19日
    23
  • 一元三次方程求根公式及韦达定理推导_韦达定理公式初中应用

    一元三次方程求根公式及韦达定理推导_韦达定理公式初中应用转自百度百科公式法(卡尔丹公式)(如右图所示)若用A、B换元后,公式可简记为:x1=A^(1/3)+B^(1/3);x2=A^(1/3)ω+B^(1/3)ω^2;x3=A^(1/3)ω^2+B^(1/3)ω。一元三次方程求根公式判别法当△=(q/2)^2+(p/3)^3>0时,有一个实根和一对个共轭虚根;当△=(q/2)^2+(p/3…

    2022年10月21日
    0
  • MyBatis入门学习(一)

    MyBatis入门学习(一)

    2021年12月10日
    39
  • java 除法取商_java除法怎样取小数部分「建议收藏」

    java 除法取商_java除法怎样取小数部分「建议收藏」2016-09-0100:30最佳答案C++的优先级优先级操作符结合性1::左2.->[]()左3++–~!-+&*()sizeofnewdeletecastname_cast单目操作符右4.*->*左5*/%左6+-左7<<>>左8<<=>>=…

    2022年5月30日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号