请选择 进入手机版 | 继续访问电脑版

无忧编程_ASP.NET  / C# / PHP 程序员的软件世界

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 601|回复: 0

MySQL中char、varchar和text的区别

[复制链接]

370

主题

400

帖子

1656

积分

管理员

Rank: 9Rank: 9Rank: 9

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

关于存储空间:
在使用UTF8字符集的时候,手册上是这样描叙的:
  • 基本拉丁字母、数字和标点符号使用一个字节;
  • 大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;
  • 韩语、中文和日本象形文字使用三个字节序列。

    结论:


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

本文转自:https://www.cnblogs.com/xianDan/p/4292706.html
windows .net(C#+MSSQL) linux(php+mysql)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|软件编程 ( 鄂ICP备11006601号鄂公网安备 42011102001337号 |

GMT+8, 2018-10-21 08:37 , Processed in 0.154450 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表