hello,大家好,我是你的怪味老王,今天我们来学习一下数据类型,我们将从数字类型,时间和日期类型,字符串类型来了解一下该内容。
1.数字类型:
整数类型 注: 无符号数据类型:使用 UNSIGNED关键字修饰 示例: "INT"有符号NT类型; "INT UNSIGNED"无符号INT类型。演示:
#创建mydb数据库 create database mydb; #演示整数类型的使用及注意事项 use mydb; create table my_int( int_1 int, int_2 int unsigned, int_3 tinyint, int_4 tinyint unsigned ); #插入成功测试 insert into my_int values(1000,1000,100,100); #插入失败测试 insert into my_int values(1000,-1000,100,100); #查看my_int表结构 desc my_int;注: 显示宽度:默认情况下,是取值范围所能表示的最大宽度。 对于有符号类型:符号也占用一个宽度。 示例:255的显示宽度为3,-255的显示宽度为4。 显示宽度与取值范围无关:若数值的位数小于显示宽度,会填充空格,若大于显示宽度,则不影响显示结果。 例:
#为字段设置零填充(zerofill) create table my_int2( int_1 int(3) zerofill, int_2 tinyint(6) zerofill ); #查看表的结构 desc my_int2; #若数值宽度小干显示宽度,会在左侧填充0 insert into my_int2 values(1234,2); #查看表中数据 select * from my_int2; 浮点数类型 注: 无符号数椐类型:使用 UNSIGNED关键字修饰 修饰为无符号后,取值范围将不包含负数浮点数类型精度不高。 FLOAT的精度大约6-7位; DOUBLE的精度大约15位左右。 如果超出精度,可能会导致给定的数值与实际保存的数值不一致,发生精度损失。
观察float超出精度时的保存结果:
#创建表,选取float类型进行测试 create table my_float(f1 float,f2 float); #插入未超出的精确数字 insert into my_float values(111111,1.11111); #插入超出精确的数字 insert into my_folat values(1111111,1.1111111); #插入7位数,第7位四舍五入 insert into my_float values(1111114,1111115); #插入8位数,第7位四舍五入,第8位忽略 insert into my_float values(11111149,11111159); #查询结果 select*from my_float; 定点数类型 通过Decimal(M,D)设置位数和精度。 M:表示数字的总位数(不包括".“和”-")最大为65,默认为10; D:表示小数点后的位数,最大值为30,默认值为0。 例: Decimal(5,2)表示取值范围是999.99~999.99观察Decimal超出精度时的保存结果:
#创建表,选取Decimal类型进行测试 Create Table my_decimal(d1 Decimal(4,2),d2 Decimal(4,2)); #插入的小数部分超出范围时,会四舍五入并发出警告 Insert Into my_decimal Values(1.234,1.235); Show warnings; #插入的小数部分四舍五入导致整数部分进位时,插入失败 Insert Into my_decimal Values(99.99,99.999); #查询结果 Select *From my_decimal; BIT类型 BIT(位)类型用于存储二进制数据,语法如下: BIT(M) M表示位数,范围1~64.如何使用BIT类型保存字符"A":
#获取字符“A”的ASCII码,,结果为65 Select ASCII ('A'); #将十进制数转换成二进制,并计算长度,结果分别为1000001,7 Select Bin(65), Length(Bin(65)); #创建表,然后插入数据 Create Table my_bit (b Bit(7)); Insert Into my_bit values(65); #查询数据,查询结果为”A“ Select*From my_bit Where b=65; #查询数据并转换为二进制数字显示,查询结果为”1000001“ Select Bin(b) From my_bit;这个不做太多要求,了解一下即可~ 2.时间日期类型 这个时间日期类型的不难,看懂这张表,也基本就差不多了。但我们还要注意以下情况。 它既可以用字符串表示也可以直接用数字表示。 我们来看一下他们的用法: 若使用两位字符串表示,范围为"00"~“99”: "00"到"99"范围的值会被转换为2000~2069, “70"到"99"范围的值会被转换为1970~1999 例如:输入"20”,插入到数据库中的值为2020
若使用两位数字表示,范围为1~99: 1到69范围的值会被转换为2001~2069 70到99范围的值会被转换为1970~1999 例如:输入20,插入到数据库中的值为2020。
注意区分0(字符串)和0(数字) “0”表示的YEAR值是2000, 0表示的YEAR值是0000。
可使用 CURRENT_DATE或著NOW()输人当前系统日期。
#当前系统信息 SELECT CURRENT_DATE, NOW(); TIME类型值:表示时间值 他一般有三个表达方式: 第一种表达方式:就是正常的数字或者字符串; 第二种表达方式:就是直接利用上面“获取当前系统信息”的语句; 第三种表达方式:以 ‘D HH:MM:SS’字符串格式表示。 D表示日,可以取0~34之间的值,插入数据时,小时的值等于Dx24+HH。 例 输入211:30:50,插入数据库中的时间为59:30:50; 输入’11:30:50’,插入数据库中的时间为11:30:50; 输入"34 22:59:59,插入数据库中的时间为838:59:59。Datetime类型:表示时间和日期。Timestamp(时间戳)类型:表示日期和时间。 显示形式与 DATETIME相同,但取值范围比 DATETIME小 使用 CURRENT_TIMESTAMP来输入系统当前日期和时间。 无任何输入,或输入NULL时,实际保存的是系统当前日期和时间。3.字符串类型
CHAR和 VARCHAR 区别:VARCHAR可以存储可变长度的字符串。 CHAR(M)或 VARCHAR(M) M:字符串的最大长度
Text类型:保存大文本数据。 需注意: 空格问题: CHAR和 VARCHAR类型在插入数据时,若字符串末尾有空格。CHAR类型会自动去掉空格后保存,而 VARCHAR、TEXT类型会保留空格。
ENUM类型:枚举类型 ENUM(‘值1’,‘值2’,‘值3’,…‘值n’) ENUM类型的数据只能从枚举列表中选取,并且只能取一个。
ENUM使用示例:
#创建表 Create Table my_enum (gender ENUM('male','female')); #插入两条测试记录 Insert Into my_enum Values('male'),('female'); #查询记录,查询结果为”female“ Select*From my_enum Where gender='female'; #插入枚举列表中没有的值测试 Insert Into my_enum Values('m'); SET类型:保存字符串对象。 SET与ENUM的区别: 它可以从列表中选择一个或多个值来保存,多个值之间用逗号“,"分隔。SET使用示例:
#创建表 Create Table my_set (hobby Set('book','game','code')); #插入3条测试记录 Insert Into my_set Values(''),('book'),('book,code'); #查询记录,查询结果为”book,code“ Select *From my_set Where hobby='book,code'; BINARY和VARBINARY类型 BINARY和VARBINARY类型类似于CHAR和VARCHAR不同的是它们所表示的是二进制数据。 BINARY(M)或VARBINARY(M) BINARY类型的长度是固定的,如果数据的长度不足最大长度,将在数据的后面用“\O”补齐,最终达到指定长度。BINARY和VARBINARY使用示例:
#创建表,插入测试记录 Create Table my_blinary (b1 Binary(4),b2 Varbinary(4)); Insert Into my_blinary Values('abc','xyz'); #查询记录,两次查询结果分别为‘abc\0'和’xyz'(\0显示为空格) Select b1 From my_blinary Where b1='abc\0'; Select b2 From my_blinary Where b2='xyz'; #查询记录,由于区分大小写,查询结果都为空 Select b1 From my_blinary Where b1='ABC\0'; Select b2 From my_blinary Where b2='XYZ'; BLOB类型:保存数据量很大的二进制。BLOB使用示例:
#创建表,插入测试记录 Create Table my_blob(b blob); Insert Into my_blob Values('date'); #查询记录,查询结果为‘date’ Select b From my_blob Where b='data'; #查询记录,由于区分大小写,查询结果为空 Select b From my_blob Where b='DATA';最后再看几个小知识点:
转义字符
布尔值:用于逻辑判断。 需注意:在Select,Insert等语句中使用布尔值: True会转换为1; False会转换为0.(不需要区分大小写)
NULL值:通常用来表示没有值,值不确定等含义。
欢迎评论区留言~ 啾咪~