标签:浮点数 结果 text set 增加 charset 负数 lin 字符
create table if not exists my_int(
int_1 tinyint,
int_2 int
)charset utf8;
-- 有效数据
-- 查看数据为正确数据100,100
insert into my_int values(100,100);
-- 无效数据: 类型限定
-- 因为只能存储数值型,类型限制
insert into my_int values(‘a‘,‘188‘);
-- 错误: 超出范围
-- 因为tinyint是有符号的,存储范围是-128-127,若是无符号则存储范围是0-255
insert into my_int values(255,10000);
alter table my_int add int_3 tinyint unsigned;
-- 增加一条数据,此时的255可以存储进去
insert into my_int values(127,222,255);
-- 新增一个宽度为2的零填充行\
alter table my_int add column tinyint(2) zerofill;
-- 插入数据
insert into my_int values(100,100,100,1),(200,200,200,2);
-- 插入的数据1,2 会显示为01,02
-- 创建表
create table if not exists my_float(
float_1 float, -- 没有小数部分
float_2 float(10,2), -- 总长度为10,整数为8
float_3 float(5,2)
)charset utf8;
-- 插入数据
-- 插入数据
insert into my_float values(1000.10,1000.10,1000.10); -- 符合条件
insert into my_float values(1234567890,12345678.90,1234.56); -- 符合条件
insert into my_float values(3e38,3.01e7,1234.56);
insert into my_float values(9999999999,99999999.99,9999.99); -- 最大值
-- 超出长度插入数据
insert into my_float values(123456,1234.123456768,123.9876543); -- 小数部分OK
insert into my_float values(123456,1234.12,12345.56); -- 整数部分超出
-- 创建定点型表,与float对比
create table if not exists my_decimal(
f1 float(10,2),
d1 decimal(10,2)
)charset utf8;
-- 插入数据
insert into my_decimal values(12345678.90,12345678.90); -- 有效数据
insert into my_decimal values(1234.123456,1234.1234356); -- 小数部分超出:ok
insert into my_decimal values(99999999.99,99999999.99); -- 没有问题
insert into my_decimal values(99999999.99,99999999.999); -- 进位超出范围
一定
不能超出长度(进位不可以),小数部分的长度可以随意超出(系统自动四舍五入)变长字符串:varchar,在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少,是根据具体的数据来确定
Varchar(L): L表示字符长度 理论长度是65536个字符, 但是会多处1到2个字节来确定存储的实际长度,当数据小于255时,会多1个字节来确定实际的存储长度,当数据大于255,小于65535时,会多出2个资金额来确定实际的存储长度, 但是实际上如果长度超过255,既不用定长也不用变长, 使用文本字符串text
Varchar(10): 存储10个汉字, utf8环境, 10 * 3 + 1 = 31(bytes)
? 存储3个汉字: 3 * 3 + 1 = 10(bytes)
定长、变长选择
变长的磁盘空间比较节省,但是效率低,如果数据不能确定长度,不同的数据有变化,使用变长,例如姓名、地址等
-- 创建表
create table if not exists my_enum(
gender enum(‘man‘,‘woman‘,‘secrecy‘)
)charset utf8;
insert into my_enum values(‘man‘),(‘woman‘),(‘secrecy‘); -- 插入成功
insert into my_enum values(‘男‘); -- 错误: 没有该元素
-- 将字段结果取出来进行+0运算,会发现gender+0 是数字1,2,3分别对应man,woman,secrecy
select gender + 0, gender from my_enum;
-- 数值插入枚举元素,这样插入数据1代表man,2代表woman,3代表secrecy
insert into my_enum values(1),(2),(3);
-- 创建表
create table if not exists my_set(
hobby set(‘篮球‘,‘足球‘,‘乒乓球‘,‘羽毛球‘,‘排球‘,‘台球‘,‘网球‘,‘棒球‘)
)charset utf8;
-- 插入数据
insert into my_set values(‘足球,台球,网球‘);
insert into my_set values(3);
-- 查看集合数据
select hobby + 0, hobby from my_set;
-- 98转成二进制 = 64 + 32 + 2 = 01100010, 对应的存储是 足球,台球,网球
-- 3转成二进制 = 64 + 32 + 2 = 00000011, 所以insert into my_set values(3); 实际存储的是‘篮球‘,‘足球‘
-- 颠倒元素出现的顺序,不会影响存储,系统还是按照元素列表去匹配顺序
insert into my_set values(‘网球,台球,足球‘);
-- 创建时间日期表
create table my_date(
d1 datetime,
d2 date,
d3 time,
d4 timestamp,
d5 year
)charset utf8;
-- 插入数据
insert into my_date values(‘2015-9-28 11:50:36‘,‘2015-9-28‘,‘11:50:54‘,‘2015-9-28 11:51:08‘,2015);
-- 时间使用负数
insert into my_date values(‘2015-9-28 11:50:36‘,‘2015-9-28‘,‘-11:50:54‘,‘2015-9-28 11:51:08‘,2015);
insert into my_date values(‘2015-9-28 11:50:36‘,‘2015-9-28‘,‘-211:50:54‘,‘2015-9-28 11:51:08‘,2015);
insert into my_date values(‘2015-9-28 11:50:36‘,‘2015-9-28‘,‘-2 11:50:54‘,‘2015-9-28 11:51:08‘,2015); -- -2过去2天:48
-- year可以使用2位或者4位
insert into my_date values(‘2015-9-28 11:50:36‘,‘2015-9-28‘,‘11:50:54‘,‘2015-9-28 11:51:08‘,69);
insert into my_date values(‘2015-9-28 11:50:36‘,‘2015-9-28‘,‘11:50:54‘,‘2015-9-28 11:51:08‘,70);
-- timestamp: 修改记录
update my_date set d1 = ‘2015-9-28 11:55:45‘ where d5 = 2069;
标签:浮点数 结果 text set 增加 charset 负数 lin 字符
原文地址:https://www.cnblogs.com/nordon-wang/p/9005912.html