五, mysql 中数据类型:
1. 整型
2. 浮点型
3. 日期
4. 字符类型
5. 枚举和集合类型
//注意boolean值(用整型表示)>>>>tinyint(1)
1 整形
有符号(默认), 无符号(unsigned), 用0填充: zerofill
约束的作用: 保证数据的完整性和一致性:
# tinyint 极小整型 (默认有符号 +/-) //占一个字节
tinyint[(m)] [unsigned] [zerofill]
有符号 [-128~127]
无符号 0-255
# int 整型 // 占4个字节
int[(m)] [unsigned] [zerofill]
有符号 -2147483648 ~ 2147483647
无符号 0 ~ 4294967295
# bigint 大整数 //占8个字节
bigint[(m)] [unsigned] [zerofill]
有符号: -9223372036854775808 ~ 9223372036854775807
无符号: 0~18446744073709551615
#smallint 占两个字节 ()
有符号: [-32768, 32768]
无符号: [0, 65535]
#mediumint 占三个字节
有符号: [-8388608, 8388607]
无符号: [0, 16777215]
2 浮点型:
# float 占四个字节(单精度)
folat[(M, D)]
#double 占8个字节(双精度)
# decimal(M, D) >>> 如果M>D, M+2, 否则 D+2 (小数值) ( 内部存储的是字符, 所以相对准确)
这里M 是整数部分总个数, D是小数后个数, M最大65, D最大30
3. 日期类型
YEAR 年份 1901-2155
DATE 日期(年月日) yyyy-MM-DD (1000-01-01/9999-12-31)
TIME 时分秒 HH:MM:SS('-838:59:59'/'838:59:59')
DATETIME 年月日+时分秒 YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
TEIMSTAMP 年月日+时分秒
//在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。
下面就来总结一下两种日期类型的区别。
1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,
操作系统以及客户端连接都有时区的设置。
3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),
如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
4 . 字符类型
char 字符长度 0-255 占用4个字节
定长: 简单, 浪费空间, 存取速度快
存储: 存储char类型的数值, 会往右填充空格来满足长度 ,
(pad_char_to_full_length sql模式, 自动清除尾部空格),
设置方法 sql_mode='PAD_CHAR_TO_FULL_LENGTH';
查询模式 : select @@sql_mode;
varchar 0-5个字节
变长, 精准(保存输入的空格), 节省空间, 存取速度慢 长度 0-65535
字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
存储:
varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来
强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
检索:
尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容
length(); 查询字节数
char_length(); 查询字符数
(#常用字符串系列:char与varchar
注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
#其他字符串系列(效率:char>varchar>text)
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
BINARY系列 BINARY VARBINARY
text:text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters)
5. 枚举和集合:
字段的值只能在给定范围中选择,如单选框,多选框
枚举: enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
集合: set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)