mysql字段类型
数据库的数据类型,总共3大类:
①数值型
②字符串类型
③日期和时间类型
数据类型主要用在创建表的时候指定列的数据类型
数值类型包括:
1. 整数类型
2. 小数型(包括浮点和定点)
1. 1数值类型之整数类型
整数类型 [(M)] [UNSIGNED] [ZEROFILL]
1. M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关
2. unsigned用于设定该整数为“无符号数”,其实就是没有负数
3. 如果为一个数值列指定ZEROFILL (用0来填充),MySQL自动为该列添加UNSIGNED属性
4. 一般 M 和 ZEROFILL 配合使用
5. 只用ZEROFILL的时候,按所指定类型最长度显示 比如 tinyint zerofill; — 003
create table t1(f1 int unsigned,f2 tinyint zerofill,f3 int(10) zerofill)charset=utf8;
insert into t1 values(188,7,53);
运行截图:
1.2数值类型之小数类型
- Float 4个字节存储 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
小(单精度)浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。??不懂
M是小数纵位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。如果指定UNSIGNED,不允许负值。 - DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] double使用8个字节存储
普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。??不懂
M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位。
如果指定UNSIGNED,不允许负值。 - DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10.
-- decimal(10,2),表示整数8位,小数2位
Create table t3(f1 float ,f2 double,f3 decimal(10,2)) charset=utf8;
Insert into t3 values (123456789,123456789,12345678);
Insert into t3 values (123456789,123456789123456789,123456);
2.字符串类型
char 和 varchar 详见:char 和 varchar 区别与分析
1. char 定长字符串,应设定字符个数(默认1),不足设定值,则右侧自动填满空格;最大255个字符。
2. varchar变长字符串,需设定字符个数,最大65532个字符,且不超过65532个字节(考虑字符集问题),根据实际存储字符串长度来决定占用空间。实际还得考虑一行的其他字段所占的长度
3. 文本列类型text:用于存储普通文本,不受行的最大长度的限制,最多可以存储65535个字符,同类还有:tinytext, mediuntext, longtext。
4. 枚举类型enum: 类似单选项应用中的多个选项值,最大65535个选项值;使用形式:enum(‘value1’, ‘value2’, … );存储数据的时候其实存的是一个对应的数字序号(从1开始)
5. set类型:类似多选项应用中的多个选项,最多64个选项,使用形式:set(‘value1’, ‘value2’, …); 内部存储的也是数字(依次为1,2,4,8, ….),但可以是多个值,比如5就表示2个值(1,4),14就表示3个值(2,4,8)
6. 其他 :
①定长二进制字符串binary:类似char,应该设定长度值,只是按“二进制字节”保存存字符数据,最大255个字节,无编码问题
②变长二进制字符串varbinary:类似varchar,需要设定长度值,只是按“二进制字节”存字符数据,最大65532个字节,无编码问题
③序列类型serial: 其实只是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一个别名(同义词)
④布尔类型bool:其实只是tinyint(1)的一个同义词,其值为0就表示false,否则表示true
⑤ 位类型bit:使用形式:bit[(M)],其中M是1-64的数字,表示使用多少位二进制数字来存储数据。插入形式为:b’value’,比如:b’101’
enum 和 set的使用
create table enum_set(
id int auto_increment primary key,
sex enum('男','女'),/*1 - 男 ,2 - 女*/
hobby set('篮球','足球','羽毛球','排球') /*1 2 4 8 */
)charset = utf8;
-- ''之间的内容不能有空格否则报错 Data truncated for column 'hobby' at row 1
insert into enum_set (id,sex,hobby) values(null,'男','羽毛球,足球,篮球');
insert into enum_set (id, sex, hobby) values (null,'1','14');
3.日期时间类型
①date类型: 支持的范围为’1000-01-01’到’9999-12-31’
②time类型: 支持的范围是’-838:59:59’到’838:59:59’
③datetime类型:支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’
④timestamp类型:时间戳,就是表示“当前时刻”,类似函数now()获得的值,用于INSERT或UPDATE操作时自动获得当前时间
⑤year类型: 四位字符串,范围为’1901’到’2155’;四位数字,范围为1901到2155;两位字符串,范围为’00’到’99’;两位整数,范围为1到99
-- 日期时间类型
create table tab_date_time(
dt datetime,
m_date date,
m_time time,
m_year year,
ts timestamp
);
insert into tab_date_time (dt,m_date,m_time,m_year) values (now(),now(),now(),'2016');
insert into tab_date_time (dt,m_date,m_time,m_year) values ('2016-04-01 7:10:11','2015/3/9','10:20:30','2016');