专栏首页Python攻城狮MySQL中char、varchar和text的区别

MySQL中char、varchar和text的区别

它们的存储方式和数据的检索方式都不一样。 数据的检索效率是:char > varchar > text 空间占用方面,就要具体情况具体分析了。

1.char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字符,都要占去10个字符的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。 2.varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。 3.text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。


关于存储空间:

在使用UTF8字符集的时候,手册上是这样描叙的:

基本拉丁字母、数字和标点符号使用一个字节; 大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言; 韩语、中文和日本象形文字使用三个字节序列。


结论:

  • 经常变化的字段用varchar;
  • 知道固定长度的用char;
  • 尽量用varchar;
  • 超过255字节的只能用varchar或者text;
  • 能用varchar的地方不用text;
  • 能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

文章来源:http://www.cnblogs.com/xianDan/p/4292706.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python数据科学(二)- python与数据科学应用(Ⅱ)1.Python3 语法之for循环、if分支语句2.函数3.导入模块4.Jupyter notebook内代码的保存与分享5.数据科学实

    使用Jupyter notebook文档写好之后, 保存成为一般的.ipynb的格式, 但是也可以保存成其他的格式, 如: Python(.py), Markd...

    Python攻城狮
  • 面向对象 看这篇文章就够了

    面向对象(object-oriented ;简称: OO)至今还没有统一的概念 我这里把它定义为:按人们 认识客观世界的系统思维方式,采用基于对象(实体)的概念...

    Python攻城狮
  • GitHub 系列之「怎样使用 GitHub?」1.写在前边的话,为什么要写CitHub?2.GitHub 是什么?3.注册 GitHub

    跟朋友在交流的时候听到求职的时候发现有些公司要附Github帐号,一个优秀的 GitHub 账号当然能让你增色不少。自己之前听说过,但没有花时间研究,最后花了时...

    Python攻城狮
  • 敏捷开发下该如何正确的看待人/天这件事?

    传统软件估算人天的方式, 有的使用 Functional Points, Delphi....等等。 敏捷开发, 使用数学黄金比例; 1, 2, 3, 5,...

    Ken Fang 方俊贤
  • JavaScript 技术篇-js正则表达式匹配字符串左右两边是否包含空格

    同理 /(\s$)/ 是匹配右边的空格。 只要包含空格是 /(\s)/。 还可以通过 indexOf(" ") 来进行检测是否包含空格。

    小蓝枣
  • http和https是什么?有什么区别?

    HTTPS是什么意思? HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,中文含义为“超...

    码神联盟
  • Spring中IOC的好处

    问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,...

    葆宁
  • Python编程中一定要注意的那些“坑”(一)

    1 逗号不是运算符,只是个普通的分隔符 >>> x = 3, 5 >>> x (3, 5) >>> x == 3, 5 (False, 5) >>> 1, 2...

    Python小屋屋主
  • JavaScript Standard 编码规范

    在远程工作中,并不是所有项目都是从头开始的,有很多项目是已经做了一部分,或者需要按着其要求来创建项目和编码的。所以这其中就有一些公司或者团队会使用一些代码规范,...

    我与梦想有个约会
  • FPGA 高级设计:时序分析和收敛

    什么是静态时序分析?静态时序分析就是Static Timing Analysis,简称 STA。它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特...

    FPGA技术江湖

扫码关注云+社区

领取腾讯云代金券