储存不区分大小写的字符数据

TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。

TEXT 最大长度是 65535 (2^16 – 1) 个字符。

MEDIUMTEXT 最大长度是 16777215 (2^24 – 1) 个字符。

LONGTEXT 最大长度是 4294967295 (2^32 – 1) 个字符

Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节
char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节
Varchar 的类型不以空格填满,比如varchar(100),但它的值只是”n”,则它的值就是”n”
而char 不一样,比如char(100),它的值是”n”,而实际上它在数据库中是”n “(n后共有99个空格,就是把它填满为100个字节)。
由于 char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!

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

数据的检索效率是: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

 
建表时IP字段设成了varchar,但是由于要对其建索引,以达到与其它表结合查询时提高效率的目的,打算将它改成char,修改后竟然没有成功。
最后发现原来要改就必须把该表中的所有varchar和text的字段一次性都改为char:
alter table ip_table modify ipddress char(16) default ”,modify status char(10) default ”,modify memo char(255) default ”;
又试了下,如果原表中都是char,只要把其中一个字段改为varchar或者text,则其它所有char字段自动改为varchar
……
alter table ip_table modify memo text;
之后表中的情况:
ipddress varchar(16)
status varchar(10)
memo text
mysql也太扯了……
在同一个表中不能混用CHAR 和VA R C H A R。MySQL 根据情况甚至会将列从一种类型转换为另一种类型。这样做的原因如下:
■ 行定长的表比行可变长的表容易处理(其理由请参阅2 . 3节“选择列的类型”)。
■ 表行只在表中所有行为定长类型时是定长的。即使表中只有一列是可变长的,该表的
行也是可变长的。
■ 因为在行可变长时定长行的性能优点完全失去。所以为了节省存储空间,在这种情况
下最好也将定长列转换为可变长列。
这表示,如果表中有VARCHAR 列,那么表中不可能同时有CHAR 列;MySQL 会自动
地将它们转换为VARCHAR 列。例如创建如下一个表:
CREATE TABLE my_table
(
c1 CHAR(10),
c2 VARCHAR(10)
)
如果使用DESCRIBE my_table 查询,则其输出如下:
Feild Type Null Key Default Extra
c1 varchar(10) yes null
c2 varchar(10) yes null
请注意,VARCHAR 列的出现使MySQL 将c1 也转换成了VARCHAR 类型。如果试图用
A LTER TABLE 将c1 转换为C H A R,将不起作用。将VARCHAR 列转换为CHAR 的惟一办
法是同时转换表中所有VARCHAR 列:
ALTER TABLE my_table MODIFY c1 CHAR(10),MODIFY c2 CHAR(10)

mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择的更多相关文章

  1. mysql 字符串类型 char varchar

    字符类型用在存储名字.邮箱地址.家庭住址等描述性数据   char指的是定长字符,varchar指的是变长字符 #官网:https://dev.mysql.com/doc/refman/5.7/en/ ...

  2. mysql的char,varchar,text,blob

    mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下. 先简单的总结一下: char:定长,最大255个 ...

  3. mysql中char,varchar,text

    1.char char最大长度是255字符,注意是字符数和字符集没关系. 1)可以有默认值, 2)尾部有空格会被截断 3)不管汉字.英文,还是其他编码,都可以存255字符 2.varchar 1)va ...

  4. MySQL服务 - MySQL列类型、SQL模式、数据字典

    MySQL列类型的作用: 列类型可以简单理解为用来对用户往列种存储数据时做某种范围"限定",它可以定义数据的有效值(字符.数字等).所能占据的最大存储空间.字符长度(定长或变长). ...

  5. mysql基础: mysql列类型--字符串

    mysql列类型:整型   http://blog.csdn.net/jk110333/article/details/9342283 mysql列类型--时间和日期  http://blog.csd ...

  6. mysql基础:mysql列类型--时间和日期

    mysql列类型--整型 http://blog.csdn.net/jk110333/article/details/9342283 mysql列类型--字符串http://blog.csdn.net ...

  7. 字符串类型:char,varchar,text,enum,set

    字符串类型 1.char 格式:char (M) 2.varchar 格式:varchar (M) [注意]M表示允许的字符串长度[65535].M表示的是字符数,而不是字节数.但是最大长度的使用是按 ...

  8. mysql列类型

    mysql三大列类型 整型 tinyint(占据空间:1个字节 存储范围  有符号  -128-127   无符号  0-255) smallint   mediumint    int    big ...

  9. mysql 列类型以及属性特点

    整形列: 一个字节有8个位,例如:int 类型的列存入数字1,00000000 00000000 00000000 00000001它就在最低位置上存入一个1,由此可见是极大的浪费资源,所以在建立列类 ...

随机推荐

  1. [LOJ#2878]. 「JOISC 2014 Day2」邮戳拉力赛[括号序列dp]

    题意 题目链接 分析 如果走到了下行车站就一定会在前面的某个车站走回上行车站,可以看成是一对括号. 我们要求的就是 类似 代价最小的括号序列匹配问题,定义 f(i,j) 表示到 i 有 j 个左括号没 ...

  2. elasticsearch同步mongodb--mongo connector的使用

    部署准备 python-3.6.4-amd64.exe mongodb-win32-x86_64-3.4.6-signed.msi  (如果已经安装可以忽略) 注意点! 之前我写的一篇文章用的是ela ...

  3. Meteor入门介绍

    Meteor是什么 基于nodejs的实时web APP开发框架. Meteor能带来什么 简单的说,你可以用js搞定客户端.服务端的开发.另外,客户端.服务端的界限被极大的模糊.客户端的界面跟服务端 ...

  4. Linux下的信号详解

    文章链接:https://blog.csdn.net/qq_38646470/article/details/80257512

  5. Ubuntu16.04+Java8+Mysql5.7+Tomcat8.5服务器环境配置

    本文章使用环境: Ubuntu16.04 Java8 Mysql5.7 Tomcat8.5 Ubuntu 版本16.04, 本文采用SSH远程登录主机 工具:Xshell 默认使用root用户登录 ( ...

  6. L2-031 深入虎穴(BFS)

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...

  7. 微软职位内部推荐-Senior Software Development Engineer_Commerce

    微软近期Open的职位: Are you looking for a high impact project that involves processing of billions of dolla ...

  8. SpringMVC 之 @ResponseBody 和 @RequestBody

    前后端进行数据交互的时候,规定数据交互的格式,使数据交互规范而统一,是极为重要的事.一般而言,我们会采用 JSON 进行数据交互.本文暂不讨论如何 JSON 的格式规范,而是解析一下如何在 Sprin ...

  9. 20135220谈愈敏Blog2_操作系统是如何工作的

    操作系统是如何工作的 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计 ...

  10. 『编程题全队』alpha阶段项目复审

    小组的名字和链接 优点 缺点,bug 报告 最终名次 Gakki赛高 (1)支持注册账号和账号管理(2) 支持自动登录,提供便捷性(3)题目不重复且题目答案准确(4)支持排行榜统计功能(5)自己设计算 ...