🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
1、整数类型 下表中指明了具体的整数类型,存储消耗的字节数,最小最大取值范围,unsigned代表不允许负数,则正整数的取值范围扩大一倍 ![](https://box.kancloud.cn/e27e77c6e4c1de639f4fc8e940624da5_687x383.png) mysql> alter table temp1 modify id2 int(20) zerofill; Query OK, 1 row affected (0.03 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from temp1; +------+----------------------+ | id | id2 | +------+----------------------+ | 10 | 00000000000000000010 | +------+----------------------+ ####zerofill 表示补零。 2、浮点类型 (1)、Decimal的使用方法举例为decimal(5,2) 其中的5代表为精度,表示了可以使用多少位数字 其中的2代表小数点后面的小数位数 当不需要指定小数时,可以使用decimal(M),decimal(M,0)表示 M默认值为10 ,M的最大取值为65,D的最大取值为30,当D为0时可以用来存储比BIGINT更大范围的整数值 当指定unsigned,表示不允许负数 浮点类型中包含float和double两种,与decimal相比是不精确类型 (2)、FLOAT[(M,D)] [UNSIGNED]中的M代表可以使用的数字位数,D则代表小数点后的小数位数 Unsigned(无)代表不允许使用负数 Float的取值范围为-3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38 (3)、DOUBLE[(M,D)] [UNSIGNED]中的M代表可以使用的数字位数,D则代表小数点后的小数位数 Double的取值范围对比float要大,-1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308 3、时间日期类型 (1)、Date类型用来表示仅日期,MySQL默认的日期格式为yyyy-mm-dd,取值范围为1000-01-01到9999-12-31 (2)、Datetime类型用来表示日期和时间,MySQL默认的格式为yyyy-mm-dd hh:mi:ss,取值范围为1000-01-01 00:00:00到9999-12-31 23:59:59 (3)、Timestamp类型也用来表示日期和时间,其取值范围为1970-01-01 00:00:01到2038-01-19 03:14:07 Datetime和timestamp两个类型都可以保存到微妙级别,即6位毫秒微妙精度,即1000-01-01 00:00:00.000000到9999-12-31 23:59:59.999999和1970-01-01 00:00:01.000000到2038-01-19 03:14:07.999999 非法的date,datetime,timestamp值将被转换成0值,0000-00-00或者0000-00-00 00:00:00 (4)、Time类型用来仅表示时间,MySQL默认格式为HH:MM:SS,其取值范围为-838:59:59到838:59:59,小时字段可以超过24是因为time类型不光代表小时,也可以代表持续时长中的小时 Time类型也可以包含6位的毫秒微秒精度,其取值范围为-838:59:59.000000到838:59:59.000000 (5)、Year类型用来仅表示年份,MySQL默认格式为YYYY,其取值范围为1901到2155,和0000 针对非法的year数据,则直接转化为0000 **当在time,timestamp,datetime中指定含有毫秒微秒数值时,则用type_name(fsp)来表达,其中fsp可以取0到6之间的数值** 字符类型 字符类型包含char, varchar, binary, varbinary, blob, text, enum和set 1、Char和varchar可以通过char(M)和varchar(M)指定可以存储的最大字符数,比如char(30)表示可以存储最长30个字符 Char类型的长度一旦指定就固定了,其范围可以是0到255,当被存储时,未达到指定长度的则在值右边填充空格,而获取数据时则会把右侧的空格去掉 Varchar类型是变长的类型,其范围可以是0到65535,当存储是未达到指定长度则不填充空格 ![](https://box.kancloud.cn/620bc02f63c6926dea7a6cd495ded99f_898x217.png) Varchar类型用来存储可变长字符串,是最常见的字符串数据类型,它比定长类型更节省空间,因为它仅使用必要的空间。 另外varchar需要使用1或2个额外字节记录字符串的长度,如果列的最大长度小于等于255字节时,需要1个字节,否则需要2个字节。比如采用Latin1字符集,varchar(10)的列需要11个字节的存储空间,而varchar(1000)列需要1002个字节的存储空间。 varchar节省了存储空间,所以对性能也有帮助。但由于行是变长的,在update时可能使行变得比原来更长,这就导致需要做额外的工作。如果一行占用的空间增长,并且物理数据页内没有更多空间存储时,MyISAM会将行拆成不同的片段存储,InnoDB需要分列页来讲行放到数据页里。 char类型是定长,MySQL总是根据定义的字符串长度分配足够的空间。当存储char值时,MySQL会删除所有的末尾空格 char适合存储很短的字符串,或者所有值都接近同一个长度。对于经常变更的数据,char也比varchar更好,因为定长的char类型不容易产生碎片。而且对非常短的字符串,char不需要一个额外的字节记录长度 Char类型值右边的空格会被自动剔除,而varchar类型则不会 2、Binary和varbinary类型和char/varchar类似,只不过是存储二进制字符 3、长字段 Blob和text类型被用来存储大量的数据 Blob是用来存储二进制的大量数据,其有四种类型,tinyblob、blob、mediumblob、longblob四种的区别是能存储的数据长度有所不同 Text是用来存储字符型的大量数据,其有四种类型, tinytext、text、mediumtext、longtext四种的区别是能存储的数据长度有所不同 Blob和text的列字段不能含有默认值 4、枚举类型 Enum枚举类型是字符串类型,其值是从事先指定的一系列值中选出,适用在某列的取值范围已经固定。 主要好处为MySQL在存储此类数据时,直接转化成数字存储而不是字符串,可以节省空间,并且在表的.frm文件中存储“数字-字符串”之间的对应关系。 另外枚举类型的排序规则是按照存储顺序进行而不是按照值本身排序的 如果想要按照一般的排序规则进行排序,需要使用field()函数显示指定排序规则 select size from shirts order by field(size,’large’,’medium’,’small’) 枚举类型字段的取值的增加必须通过alter table命令 mysql> alter table shirts modify size ENUM('x-small', 'small', 'medium', 'large', 'x-large','xx-large'); Enum枚举类型最多可以有65535个值 当插入数字到枚举类型字段时,数字会被当做枚举值的第几个值而插入 Enum枚举类型最多可以有65535个值 当插入数字到枚举类型字段时,数字会被当做枚举值的第几个值而插入 5、集合类型 Set集合类型是字符类型,可以含有0个或多个值,其中的每个值都需要是在创建字段时指定的集合中 比如一个字段被指定为SET(‘one’, ‘two’) not null可以含有以下四种值 '' 'one' 'two' 'one,two‘ Set集合最大可以有255个值。MySQL在存储set集合时,同样也是存储为数字类型。