MySQL数据类型

MySQL数据类型

一、整型类型 - 整型类型(显示宽度)
整型的显示宽度,对数值大小无影响,只是当设置了zerofill的时候,在查询的时候,会在前面自动补0。宽度可以不设置,因为整数数据类型都有默认的显示宽度,不设就采用默认的宽度。

二、浮点型与定点型 - 数据类型(M,D)
MySQL可以设置浮点数与定点数的精度。
M:精度,数据的总长度;
D:标度,小数点后的长度;

这种类型MySQL里有3种如:Float(6,2)、Double(6,2)、Decimal(6,2);
其区别在于:
a.当不指定精度时,Float、Double默认会保存实际精度,而Decimal默认是整数;
b.当标度不够时,都会四舍五入,但Decimal会警告信息。

三、日期与时间类型

类型       字节数  取值范围                                 零值
YEAR       1     1901~2155                                0000
DATE       4     1000-01-01~9999-12-31                    0000:00:00
TIME       3     -838:59:59~838:59:59                     00:00:00
DATETIME   8     1000-01-01 00:00:00~9999-12-31 23:59:59  0000-00-00 00:00:00
TIMESTAMP  4    1970-01-01 08:00:01~2038-01-19 11:14:07   00000000000000

另外TimeStamp类型与DateTime在无输入的情况需要注意的是:
a. TimeStamp使用Current_TimeStamp()而DateTime使用NOW(来获取当前时间);
b. 输入NULL时,系统会输入系统当前日期与时间;
c. 无任何输入时,系统会输入系统当前日期与时间;

四、字符串类型
在MySQL中,字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM、SET。
a. CHAR与VARCHAR- 字符串类型(M)
这个M是长度的意思,插入该列的字符串长度将不允许超过M所指定的长度。另外,由于MySQL在建库时就指定了字符集,因此就不存在nchar、nvarchar、ntext这种数据类型了。
(char最长可取255;varchar最长可取65535;)

b.TEXT
TEXT分为4种,与SQLServer不同:

类型        允许的长度           存储空间
TINYTEXT      0~255字节         值的长度+2字节
TEXT          0~65535字节       值的长度+2字节
MEDIUMTEXT    0~167772150字节   值的长度+3字节
LONGTEXT      0~4294967295字节  值的长度+4字节

c:ENUM类型 - 属性名 ENUM('值1','值2','值3'...'值n')
ENUM类型(枚举类型),与C#的概念一样,在定义时指定取值范围

( ENUM有NOT NULL属性,其默认值为取值列表的第一个元素;
ENUM无NOT NULL,则ENUM类型将允许插入NULL,并且NULL为默认值;
)

  CREATE TABLE Test4(Sex ENUM('男','女'));
  INSERT INTO Test4 VALUES('男');
  INSERT INTO Test4 VALUES('爷');    --这行报错
  SELECT * FROM Test4;

d. SET类型。
在创建表时,就指定SET类型的取值范围

属性名 SET('值1','值2','值3'...,'值n')

它与ENUM的区别在于,类似多选的ENUM。

e.二进制类型
二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。

类型              取值范围
BINARY(M)         字节数为M,允许长度为0~M的定长二进制字符串
VARBINARY(M)      允许长度为0~M的变长二进制字符串,字节数为值的长度加1
BIT(M)            M位二进制数据,M最大值为64
TINYBLOB          可变长二进制数据,最多255个字节
BLOB              可变长二进制数据,最多2的16次方-1个字节
MEDIUMBLOB        可变长二进制数据,最多2的24次方-1个字节
LONGBLOB          可变长二进制数据,最多2的32次方-1个字节

(1).BINARY和VARBINARY
两者唯一的差别在于BINARY当长度不够时会补\0。

(2) BIT类型
BIT类型与SQLServer里的就差别大了。 其定义方式为:BIT(M)


其中"M"指定了该二进制的最大字节长度为M,M的最大值为64。如BIT(4)就是数据类型为BIT类型,长度为4。其能够存储的值为0-15。因为变成二进制后,15的值为1111。
在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。

CREATE TABLE Test6(BB BIT(4));
INSERT INTO Test6 VALUES(12);
SELECT BIN(BB+0) FROM Test6;CREATE TABLE Test6(BB BIT(4));
INSERT INTO Test6 VALUES(12);
SELECT BIN(BB+0) FROM Test6;

上面的结果以二进制显示,最大的长度为4。

(3)BLOB类型
 BLOB类型是一种特殊的二进制类型。BLOB可以存储数据量很大的二进制数据,如图片,视频等。BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们之间的区别也只是最大长度不同。

五、数据类型的选择方式
整型:根据要显示的最大值决定;
浮点型:要显示小数。如果要精确到小数点后10位,就选择DOUBLE,而不应该选择FLOAT。DECIMAL精度较高,浮点数会出现误差,如果精度较高,则应选择定点数DECIMAL;
字符串型:定长与变长的区别,CHAR类型占用空间比较大,但是处理速度比VARCHAR快,如果长度变化不大,如身份证号码那种,最好选择CHAR类型。而对于评论字符串,最好选择VARCHAR;
时间:根据需要显示的类型咯,特别是TIMESTAMP,如果需要显示的时间与时区对应,就应该选择TIMESTAMP;
ENUM类型和SET类型:长度不同,ENUM类型最多可以由65535个成员,而SET类型最多只能包含64个成员。且ENUM只能单选,而SET类型可以多选;
TEXT类型和BLOB类型:TEXT只能存储字符数据,而BLOB可以存储二进制数据。如果是纯文本,适合TEXT。如果是图片等适合存二进制

六、问题总结
(1)存储路径的问题
  MySQL中,如果路径中使用""符号时,这个符号会被过滤。解决的办法是路径中用"/"或"\"来代替""。这样MySQL就不会自动过滤路径中的分隔符。

(2)MySQL中的布尔类型
  MySQL中没有Bool或Boolean类型,但是为了支持SQL标准,也可以定义Bool或Boolean类型的,但是Bool或Boolean类型最后转换成的是TinyInt(1),也就是说,在MySQL中,布尔类型实际上是TinyInt(1)。

(3)MySQL中如何存储JPG图片或MP3音乐
  一般情况下,数据库中不直接存储图片和音频文件,而是存储图片或音频文件的路径,如果在特殊情况下需要在MySQL数据库中存储图片和音频文件,可以选择BLOB类型;



番外:
MySQL数据库将字段的数据类型BOOL/BOOLEAN默认地转换成TINYINT(1);
MySQL数据库自动完成的数据类型转换过程,过程中不会给出任何错误或警告信息提示。
(跟同事探讨过要不要非得采用布尔类型的字段(开发中一直用tinyint),在Laravel中有什么不同,后面会分享一个相关文档出来。)

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