增城网站建设公司,医疗器械公司网站备案怎么做,免费电商网站建设平台,电商网站怎么做推广文章目录 整数类型浮点数类型和定点数类型日期类型和时间类型1. YEAR四位两位 2. DATE3. TIME冒号差异 4. DATETIME5. TIMESTAMP 字符串类型CHAR和VARCHAR类型TEXT类型 二进制类型BITBINARY和VARBINARYBLOB 复合数据类型ENUM类型SET类型 数据库中的表由多列字段构成#xff0c… 文章目录 整数类型浮点数类型和定点数类型日期类型和时间类型1. YEAR四位两位 2. DATE3. TIME冒号差异 4. DATETIME5. TIMESTAMP 字符串类型CHAR和VARCHAR类型TEXT类型 二进制类型BITBINARY和VARBINARYBLOB 复合数据类型ENUM类型SET类型 数据库中的表由多列字段构成每一个字段指定了不同的数据类型。指定字段的数据类型之后也不决定了向字段插入的数据内容不同的数据类型也决定了MySQL在存储数据时的使用方式。MySQL支持多种数据类型包括数值类型、浮点型、日期/时间类型和字符串类型等 整数类型
类型存储需求取值范围无符号取值范围tinyint1字节-2^7 ~ 2^7 - 10 ~ 2^8-1smallint2字节-2^15 ~ 2^15-10 ~ 2^16-1mediumint3字节-2^23 ~ 2^23-10 ~ 2^24-1int(integer)4字节-2^31 ~ 2^31-10 ~ 2^32-1bigint8字节-2^63 ~ 2^63-10 ~ 2^64-1 注意 不同的整数类型取值范围不同所需要的存储空间也不同。因此要根据实际需要选择最合适的数据类型。 浮点数类型和定点数类型
浮点数类型可以用(M,D)来表示M为精度表示总共的位数D为标度表示小数的位数。其中FLOAT为单精度浮点数类型DOUBLE为双精度浮点数类型。
类型名称存储需求取值范围无符号的取值范围FLOAT4字节-3.402823466E38到-1.175494351E-380和1.175494351E-38到3.402823466E38DOUBLE8字节-1.7976931348623157E308到-2.2250738585072014E-3080和2.2250738585072014E-308到 1.7976931348623157E308 注意 这些是理论限制基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。 在mysql中还可以使用定点数表示小数。
类型名称存储需求说明DECIMAL(M,D), DECM2字节压缩的严格定点数
DECIMAL类型不同于FLOAT和DOUBLE它实际是以字符串存储的。它的有效取值范围由M和D决定。如果改变M而固定D其取值范围将随M的变大而变大。如果固定M而改变D则其取值范围将随D的变大而变小精度增加。 注意 DECIMAL的默认M值是10D值是0。 DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。 所有DECIMAL列的基本计算(-*/)用65位精度完成。 日期类型和时间类型
类型名称日期格式日期范围存储需求YEARYY / YYYY1970到2069 / 1901到21551字节DATEYYYY-MM-DD1000-01-01到9999-12-313字节TIMEHH:MM:SS‘-838:59:59’到’838:59:59’3字节DATETIMEYYYY-MM-DD HH:MM:SS‘1000-01-01 00:00:00’到’9999-12-31 23:59:59’8字节TIMESTAMPYYYY-MM-DD HH:MM:SS‘1970-01-01 00:00:01’到’2038-01-19 03:14:07’4字节 注意 TIMESTAMP为UTC时间转换为东八区就是1970-01-01 08:00:01到2038-01-19 11:14:07 1. YEAR
两位或四位格式的年。默认是四位格式。
四位
可以用四位字符串或四位数字表示范围是1901~2155。
两位
可以用两位字符串或两位数字表示范围是00~99。
两位字符串00 ~ 99。00 ~ 69和70 ~ 99范围的值分别为2000 ~ 2069和1970 ~ 1999。两位数字1 ~ 99。1 ~ 69和70 ~ 99范围的值分别为2001 ~ 2069和1970 ~ 1999。 注意 两位整数范围与字符串范围稍有不同。使用数字表示时0值被转换为0000而不是2000。 2. DATE
DATE类型用在只需要日期信息时没有时间部分。格式为YYYY-MM-DD。 指定方式
以YYYY-MM-DD或YYYYMMDD两种格式的字符串表示以YY-MM-DD或YYMMDD两种格式的字符串表示。这里的YY表示两位的年值。因为不知道是哪个世纪MySQL使用以下规则解释年值00 ~ 69和70 ~ 99分别转换为2000 ~ 2069和1970 ~ 1999。以YYYYMMDD或YYMMDD两种格式的数字表示。年与前文相似00 ~ 69和70 ~ 99分别转换为2000 ~ 2069和1970 ~ 1999。使用CURRENT_DATE或NOW()插入当前日期。
3. TIME
TIME类型用在只需要时间信息时。其小时部分会如此大的原因是它不仅可以表示一天的时间必须小于24小时还可以表示某个事件过去的时间或两个事件之间的时间间隔可以大于24小时或者为负。 指定TIME值的方式
‘D HH:MM:SS’ 格式的字符串。也可以使用下面任一种非严格语法‘HH:MM:SS’/‘HH:MM’/‘D HH:MM’/‘D HH’或’SS’。D表示日取值范围是0 ~ 34。插入时D被转换为小时保存格式为D*24HH。HHMMSS’格式的、没有间隔符的字符串或者数值。 指定的数值必须是有意义的如’101112’被理解为10:11:12但’109712’是不合法的存储时将变为00:00:00。 冒号差异
如果没有冒号MySQL假定最右边两位表示秒。MySQL解释TIME值为过去的时间而不是当天的时间。例如1112’和1112表示00:11:1212’和12表示00:00:12。如果有冒号则被看作当天的时间。即11:12’表示11:12:00而不是00:11:12。
4. DATETIME
DATETIME类型用在需要同时包含日期和时间信息时。格式为YYYY-MM-DD HH:MM:SS。指定方式
以YYYY-MM-DD HH:MM:SS或者YYYYMMDDHHMMSS两种格式的字符串以YY-MM-DD HH:MM:SS或者YYMMDDHHMMSS两种格式的字符串以YYYYMMDDHHMMSS或者YYMMDDHHMMSS两种格式的数字
5. TIMESTAMP
TIMESTAMP的显示格式与DATETIME相同也是YYYY-MM-DD HH:MM:SS。但TIMESTAMP的取值范围小于DATETIME的取值范围为’1970-01-01 00:00:01’ UTC到’2038-01-19 03:14:07’ UTC。世界标准时间Coordinated Universal Time即UTC。 DATETIME类型或TIMESTAMP类型与DATE类型可以相互转换未包含的时间部分会被设置为00:00:00多出的部分会被删除。 区别 TIMESTAMP与DATETIME除了存储字节和范围不同还有存储格式不同。DATETIME按照实际输入的格式存储与时区无关而TIMESTAMP存储是以UTC格式保存存储时对当前时区进行转换检索时再转换回当前时间。即查询时根据当前时区不同显示时间值不同。 字符串类型
MySQL支持两类字符串数据文本字符串和二进制字符串。文本字符串可以进行区分或不区分大小写的串比较也可以进行模式匹配查找。字符串类型有CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。
类型说明最大长度存储需求CHAR(M)固定长度的字符串255M字节1M255VARCHAR(M)变长字符串65535L1字节LM和1M255TINYTEXT非常小的字符串255(2^8-1)字符L1字节L28TEXT字符串65535(2^16-1)字符L2字节L216MEDIUMTEXT中等字符串16777215(2^24-1)字符L3字节L224LONGTEXT大字符串4294967295或4GB(2^32-1)字符L4字节L232
CHAR和VARCHAR类型
CHAR(M)为固定长度字符串M表示列长度M的范围是0 ~ 255。保存CHAR值时在右侧填充空格以达到指定的长度检索CHAR值时尾部的空格将被删除。在存储或检索过程中不进行大小写转换。 VARCHAR(M)是长度可变的字符串M表示最大列长度M的范围是0 ~ 65535。VARCHAR最大实际长度由最长的行大小和使用的字符集确定而其实际占用的空间为字符串的长度加1. 下表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果说明了CHAR和VARCHAR之间的差别
值CHAR(4)存储需求VARCHAR(4)存储需求‘’’ ’4个字节‘’1个字节‘ab’ab ’4个字节ab ’3个字节‘abcd’‘abcd’4个字节‘abcd’5个字节‘abcdefgh’‘abcd’4个字节‘abcd’5个字节
请注意上表中最后一行的值只适用不使用严格模式时如果MySQL运行在严格模式超过列长度不的值不保存并且会出现错误。
TEXT类型
TEXT列保存非二进制字符串。TEXT类型有四种TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。不同类型的存储空间和数据长度不同。
二进制类型
类型名称说明最大长度存储需求BIT(M)位字段类型64大约(M7)/8个字节BINARY(M)固定长度二进制字符串M个字节VARBINARY(M)变长二进制字符串M1个字节TINYBLOB(M)小BLOB255(2^8-1)字节L1字节在此L2^8BLOB(M)BLOB65535(2^16-1)字节L2字节在此L2^16MEDIUMBLOB(M)中等BLOB16777215(2^24-1)字节L3字节在此L2^24LONGBLOB(M)大BLOB4294967295或4GB(2^32-1)字节L4字节在此L2^32
BIT
BIT类型为位字段类型M默认是1。
BINARY和VARBINARY
BINARY和VARBINARY类型类似于CHAR和VARCHAR不同的是它们包含二进制字节字符串。 BINARY长度是固定的。保存时不足最大长度的将在它们右边填充值补齐以达到最大长度。 填充值是0x00(零字节)比较时0x00字节和空格是不同的0x00空格。 BLOB
BLOB是一个二进制大对象用来存储可变数量的数据。 BLOB列没有字符集排序和比较基于列值字节的数值。
复合数据类型
MySQL数据库执行两种复合数据类型分别是ENUM类型和SET类型。 一个ENUM类型只允许从一个集合中取得一个值而SET类型允许 从一个集合中取得任意多个值。
ENUM类型
ENUM是一个字符串对象其值为表创建时在列规定中显示枚举的一列值。其语法格式
column_name ENUM(’value1, value2, ... , valuen)创建表时ENUM成员值尾部的空格将被自动删除。
ENUM类型字段在取值时只能在指定的枚举列表中取而且一次只能取一个。 在某些情况下ENUM值也可以为NULL或空字符串(‘’)。
如果将一个非法值插入ENUM列将插入空字符串以作为特殊错误值。该字符串与普通空字符串不同它有数值值0。如果将ENUM列声明允许NULLNULL值作为该列的一个有效值并且默认值也是NULL。如果ENUM列声明为NOT NULL其默认值为允许的值列的第一个元素。
ENUM值在内部用整数表示每个枚举值有一个索引值
列表值所允许的成员值从1开始编号空字符串错误值的索引值是0
MySQL存储的就是这个索引值。ENUM最多有65535个元素。 如果在数值上下文中检索一个ENUM值将返回列值的索引。
drop table if exists enumtest;
create table enumtest(col enum(one, two, three));
insert into enumtest values(one),(two),(three),(NULL);
# 检索ENUM
select col, col0 from enumtest;将一个数字保存到ENUM列数字被视为索引并且保存的值是该索引对应的枚举成员。注意这不适用于LOAD DATA。 不建议使用类似数字的枚举值来定义一个ENUM列因为这很容易引起混淆。
SET类型
SET是一个字符串对象可以有零个或多个值其值为表创建时规定的一列值。
SET (value1, value2, ... , valuen)指定多个SET成员的列值时各成员之间用逗号隔开。列值本身不能包含逗号且尾部的空格将被自动删除。SET最多可以有64个成员。 与ENUM类型相同SET值在内部用整数表示列表中每一个值都有一个索引编号。SET值保存时数值的低阶位对应第一个SET成员。如果在数值上下文中检索SET值检索的值的位设置成对应组成列值的SET成员。
drop table if exists set1;
create table set1(id int primary key auto_increment, col set(a, b, c, d));
insert into set1(col) values(a),(b),(c), (d), (a,b), (a,c), (a,d);
# 从SET列检索数值值
select *, col 0 from set1;
# 查看SET列所有可能的值
show columns from set1 like col;对于指定为SET(‘a’,‘b’,‘c’,‘d’)的列成员有下面的十进制和二进制值
SET成员十进制值二进制值‘a’10001‘b’20010‘c’40100‘d’81000
如果你为该列分配一个数值值9其二进制形式为1001因此第1个成员a和第4个成员d被选择结果为a,d。