五, 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...)