MySQL字符类型

列类型

  • 整型(默认是有符号的)
类型 字节数 有符号型范围 无符号型范围(unsigned)
tinyint(M) 1字节 -128~127 0~255
smallint(M) 2字节 -32768~32767 0~65535
mediumint(M) 3字节 -8388608~8688607 16777215
int(M) 4字节 -2147483648~2147483647 4294967295
integer 4字节
bigint(M) 8字节 -9223372036854775808~9223372036854775807
float(X) 浮点型 4 -3.4E38~3.4E38(7个有效位) 如果 X < = 24 或 8 如果 25 < = X < = 53
float 4 个字节
double 双精度实型 8 个字节 -1.7E308~1.7E308(15个有效位)
double precision 8 个字节
real 8 个字节
decimal(M,D)数字型 M字节(D+2 , 如果M < D) 128bit,不存在精度损失,常用于银行帐目计算(28个有效位)
numeric(M,D) M字节(D+2 , 如果M < D)

日期和时间类型

类型 字节数
DATE 3 个字节
DATETIME 8 个字节
TIMESTAMP 4 个字节
TIME 3 个字节
YEAR 1 字节

字符串类型

类型 字节数和范围
CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8
BLOB, TEXT L+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32
ENUM(‘value1’,’value2’,…) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)
SET(‘value1’,’value2’,…) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

1 整型
如何验证存储的数据范围 ? 编程计算机 或者 python代码
⽆符号与有符号为什么⼤大⼩小不同? 因为需要用⼀个bit存储符号
默认是有符号好使⽆符号呢?
来⼀个测试,创建表 添加tinyint类型字段 插⼊255 发现最大还是127 说明
默认是有符号的 如何设置有符号?
创建表是在数据类型后⾯添加unsigned 选择哪个来使用呢?
常规int就⾜够使⽤了
全⽤bigint也行 只不过会多占一些空间,但是硬盘好像也不值钱 ⽽而且对你的程序运行速度没啥影响
最好是根据你的实际情况 ⽐如存年龄tinyint就最够
思考: 可以给整型加上宽度限制吗? 可以,尝试一下,在建表时 为int指定宽度为更大的范围
插⼊超过int范围的数据
查看结果 发现任然只能存储4字节最大值
也就是说: 整型的数据能保存的数据范围由数据类来决定
那么宽度对于整型⽽言有什么意义吗?
对于整型⽽言 宽度用于控制显示的长度
例如 int(10) 则表示显示的时候 如果不足10位则不足10位
尝试一下 发现没什么⽤ 因为你仅仅告诉她需要填充10位 并没有说⽤什么 填充
所以 要控制显示宽度 不仅需要指定宽度还要指定 zerofill 以0填充 有没有发现⼀个问题 我们之前创建的表并没有指定显示宽度 那他有没有呢?
desc查看一下
有⽽且刚好就是 能够存储的最大范围的长度 所以如果你使用的是整型 则
没有必要指定显示宽度

2浮点
float(m,d) 4字节
double(m,d) 8字节
decimal(m,d) 根据长度确定
在浮点类型中 后面的m表示整体⻓度 d表示小数长度 注意:是长度和字节数⽆关 那么整数部分的长度就是m-d
例例如 float(5,3) 最⼤能存出 99,999
三种类型的区别
相同处: ⼩数部分最大精度都是30 不同处:
1.float double 总长度最大为255
2.float double 都是不清准的小数 decimal是精准的 3.double的精度⽐float⾼一些
如何取舍根据实际情况 如果对精度要求⾼ 比如银行系统 就是用decimal 否则一般使用float
3char和varchar
宽度⽤于限制字符的长度(字符数) char 为定⻓
超出范围则报错 不足则用空格在右边补⾜长度 varchar为变⻓
超出范围则报错 不足则有几个字符就存几个
测试:
create table t10(a char(4),b varchar(4)); insert into t10 values("a","a");
select *from t10;
decimal为65

发现并没有区别!
介绍一个函数 lenght(列名) 可以查询某⼀列的长度 select char_length(a),char_length(b) from t10; 发现⻓度也相同!
这是为什么?
因为mysql⾃动把后面的空格给干掉了了! 那怎么能看一下呢?
需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH set global sql_mode =
"PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES" 再次查看:select char_length(a),char_length(b) from t10; 由此可以看出定长的char mysql的确⾃动将后⾯面的空格处理掉了
再来看一个例子:
create table t5(name char(4)); insert into t5 value("yh") insert into t5 value("egon")
select *from t5 where name = "yh "
无论后面有多少个空格都会⾃动去掉
换⼀种写法:
select *from t5 where name =like "yh " 此时就不行了 自动去除空格仅在第一种写法中生效
总结:使⽤用char类型时 如果数据长度不足则会⾃动补⾜ 在读取数据时 mysql会自动去除其中的空格
因为这是mysql内部的一个存储机制 与我们的应⽤程序逻辑⽆关
注意的是 如果数据不足规定长度 使用like 来模糊匹配时 硬盘上存储 的空格也算作有效字符
所以我们应该在后面加上% 表示后面任意长度的字符都匹配 像这样 :select *from t5 where name =like "yh%" 当然你也可以使用_ 表示一个任意字符 模糊匹配后续会详细讲

如何抉择?
你觉得那种类型好呢? 到底哪种好我们得分析一下 相同点:都是字符类型 不同点:
1.char 是固定长度 会浪费空间 存取速度快
2.varchar 是可变长度 节省空间
存取速度慢 思考 可变长度如何实现?
假设我们有两个类型 char(4)
存储: axx bx bbbbcccc varcahr(4)
存储:axxbxbbbbcccc
如何取出某个名字?
需要在前面保存字符串的长度 (1btyes+axx)(1bytes+bx)(1bytes+bbbb)(1bytes+cccc) 长度最⼤为两个字节2bytes
这就意味着 一些情况下 varchar更占用空间 并且需要计算字符串长度 所以存取速度慢

TIMESTAMP 自带默认状态,默认时间就是当前时间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,764评论 5 116
  • 字段类型数值MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对...
    小慕先森阅读 933评论 0 1
  • 最近又一次陷进苏打绿的坑出不来,第一次听是高中,上学的时候,不知道是不是全国的老师串通好的,按什么成绩名次排座位。...
    苏木辛阅读 566评论 0 1
  • 诗 酒 女人 故事和酒 2017.05.03
    陈列文阅读 131评论 1 1
  • 当了妈妈后,感觉get到了很多正能量,比如宽容心,耐心,爱心还有常怀感恩之心。也并没有像朋友们说的那样有了宝宝后生...
    灰色的破旗阅读 518评论 0 2