`
fireq3
  • 浏览: 36279 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL中char、varchar和text的区别

阅读更多

他们的存储方式和数据的检索方式都不一样。

数据的检索效率是:char>varchar>text

空间占用方面,要具体情况具体分析了。

CHAR(M) M个字节,0 <=M<= 255
VARCHAR(M) L+1个字节,其中L<=M且0 <=M<= 65535
TEXT L+2个字节,其中L< 216

Char为定长,varchar,text为变长

Char在保存的时候,后面(右边)会用空格填充到指定的长度,在检索的时候后面的空格会去掉,所以检索出来的数据需要再用什么trim之类的函数去处理。(与sql server可能有些不同)

Varchar在保存的时候,不进行填充。当值保存和检索时尾部的空格仍保留。

TEXT列不能有默认值,存储或检索过程中,不存在大小写转换.

当存储的字符超过他们定义的长度时候,如果不是在sql服务器的严格模式下,都会自动截取合适的字段存储,而不会出现错误。但是,如果是中文的话同样要报错误:)比如定义char(4),然后insert (‘c哈哈’).

 注意一点的,Char,Varchar不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值

text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入(严格模式下没有测试:))

存储计算:

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

·        基本拉丁字母、数字和标点符号使用一个字节。

·        大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言。

·        韩语、中文和日本象形文字使用三个字节序列。

char会造成空间浪费,但是有速度优势;而varchar节省了空间,但是速度就不如char。

  1. 经常变化的字段用varchar
  2. 知道固定长度的用char
  3. 尽量用varchar
  4. 超过255字节的只能用varchar或者text
  5. 能用varchar的地方不用text
分享到:
评论

相关推荐

    MySQL中字段类型char、varchar和text的区别

    在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。 它们的存储方式和数据的检索方式也都不一样。 数据的检索效率是:char &gt; varchar ...

    MySQL中CHAR和VARCHAR类型演变和详解

    在MySQL5.0.3及以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字节,也就是说,在5.0.3以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以在...

    varChar和Char之间的区别?

    2.char的存取速度比varchar要快,应为长度固定,方便程序的存储和查找; 3.char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也...

    MySQL中文参考手册.chm

    7.3.6.2 DATETIME,DATE和TIMESTAMP类型 7.3.6.3 TIME类型 7.3.6.4 YEAR类型 7.3.7 字符串类型 7.3.7.1 CHAR和VARCHAR类型 7.3.7.2 BLOB和TEXT类型 7.3.7.3 ENUM类型 7.3.7.4...

    MYSQL安装包官方试用版

    对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。 要想计算用于保存具体CHAR、VARCHAR或者TEXT列...

    MySql 5.1 参考手册.chm

    前言 1. 一般信息 1.1. 关于本手册 ...11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型

    mysql创建表方法.zip

    • 字符串类型:CHAR、VARCHAR、TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT。 • 日期和时间类型:DATE、TIME、DATETIME、TIMESTAMP、YEAR。 • 二进制数据类型:BINARY、VARBINARY、BLOB(包括 TINYBLOB、MEDIUMBLOB、...

    MySQL中文参考手册

    * 0 译者序 * 1 MySQL的一般的信息 ... # 7.3.7.1 CHAR和VARCHAR类型 # 7.3.7.2 BLOB和TEXT类型 # 7.3.7.3 ENUM类型 # 7.3.7.4 SET类型 + 7.3.8 为列选择正确的类型 + 7.3.9 列索引 + 7.3.10 多列索引 +...

    MySQL 5.1中文手冊

    11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. ...

    mysql面试题,MySQL中有几种索引类型,可以简单说说吗?

    其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。 HASH :由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。HASH索引可以...

    【MySQL面试题干货集合】20个经典常用面试题-需要找工作的一定要看 共11页.pdf

    3 MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 2 3.1 varchar与char的区别 2 3.2 varchar(50)中50的涵义 2 3.3 int(20)中20的涵义 2 3.4 MySQL为什么这么设计? 2 4 问了InnoDB的事务与日志的实现...

    MySQL面试题28道面试题

    3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 4、问了innodb的事务与日志的实现 5、MySQL binlog的几种日志录入格式以及区别 6、MySQL数据库cpu飙升到500%的话他怎么处理? 7、sql优化各种方法 8...

    mysql5.5.28.zip

    多样的数据类型,包括有/无符号1,2,3,4,8字节integers,FLOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,DATETIME,YEAR,SET,ENUM;非常灵活和安全的权限系统,密码加密;为Windows提供ODBC接口,可通过...

    mysql5.1中文手册

    CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的...

    Mysql全文搜索match against的用法

    1.使用Mysql全文检索fulltext的先决条件 表的类型必须是MyISAM建立全文检索的字段类型必须是char,varchar,text2.建立全文检索先期配置由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个...

    MySQL 5.1官方简体中文参考手册

    11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. ...

    MYSQL

    7.3.6.3 TIME类型 7.3.6.4 YEAR类型 7.3.7 字符串类型 7.3.7.1 CHAR和VARCHAR类型 7.3.7.2 BLOB和TEXT类型 7.3.7.3 ENUM类型 7.3.7.4 SET类型 7.3.8 为列选择正确的类型 7.3.9 ...

    MySQL面试题经典40问!(全)(含答案解释)

    7、 varchar 和 char 有什么区别? 8、 count(1)、 count(*) 与 count(列名) 的区别? 9、 exist 和 in 的区别? 10、 truncate、 delete 与 drop 区别? 11、 union 与 union all 的区别? 12、 group by 和 ...

    Mysql数据库设计.pdf

    DECIMAL M字节 ⼀个串的浮点数 有符号值: CHAR VARCHAR TINYBLOB BLOB MEDIUMBLOB LONGBLOB TINYTEXT TEXT MEDIUMTEXT LONGTEXT ENUM SET ⽇期与时间类型格式 DATE "YYYY-MM-DD" TIME "hh:mm:ss" DATETIME "YYYY-...

Global site tag (gtag.js) - Google Analytics