数据库 — 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)
上一篇 2022年6月19日 下午8:36
下一篇 2022年6月19日 下午8:36


相关推荐

  • 打电话省钱的方法_打什么电话最消耗话费

    打电话省钱的方法_打什么电话最消耗话费作者:Saver原载:Saver省钱妙招版权所有,转载时必须以链接形式注明作者和原始出处及本声明。随着运营商们接二连三地推出一系列的优惠服务和套餐业务,不论是聊天、短信、上网、长途,还是在特定时段拨打电话,都有了让您能“占便宜”的打法。可是面对这么多的业务、这么多的特惠时段、特惠号码、套餐、特殊业务,谁能搞清楚哪个是最适合自己、最省钱的打法呢?让我们来帮您拨拨小算盘。下面的12个方案,看有没有…

    2022年10月7日
    5
  • MySQL规范

    MySQL规范

    2021年6月10日
    77
  • 同济大学计算机夏令营2021,同济大学2021年接收推荐免试研究生(含直接攻博)名单公示…「建议收藏」

    同济大学计算机夏令营2021,同济大学2021年接收推荐免试研究生(含直接攻博)名单公示…「建议收藏」报名参选了同济大学推荐免试的考生们请注意!同济大学2021年接收推荐免试研究生拟录取名单,学校已经发布了!为帮助各位参加了推免的考生及时了解录取结果,医学教育网小编从同济大学研究生院的官网上查找到了“同济大学2021年接收推荐免试研究生(含直接攻博)名单公示”通知内容如下,请同学仔细查看!有问题请及时联系学校!为切实做好推免招生信息公开工作,保证推免工作各个环节公开、透明。按照教育部有关要求,现将…

    2022年7月25日
    79
  • Dagger2 入门解析

    Dagger2 入门解析前言在为 dropwizard 选择 DI 框架的时候考虑了很久 Guice 比较成熟 Dagger2 主要用于 Android 虽然都是 google 维护的 但 Dagger2 远比 guice 更新的频率高 再一个是 Dagger2 不同于 guice 的运行时注入 编译时生成代码的做法很好 提前发现问题 更高的效率 作者 Ryan Miao 本文为作者原创 转载请注明出处 http www cnblogs com

    2026年3月16日
    2
  • CountDownTimer_final countdown

    CountDownTimer_final countdown倒计时原来都用handler+timer写,现在发现Android已将封装好了一个类CountDownTimerpublicCountDownTimerstartCount(Buttonbutton,inttime){//由于CountDownTimer有一定的延迟,所以这里设置3400CountDownTimercountDownT

    2025年12月16日
    4
  • mongo DB的一般操作

    mongo DB的一般操作

    2021年11月26日
    44

发表回复

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

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