mysql数据库--mysql记录长度+列属性

xiaoxiao2025-04-26  16

mysql记录长度:

mysql中规定任何一条记录长度最长不超过65535字节,(varchar永远达不到理论值) varchar实际存储长度能达到多少呢?看字符集编码 utf8下varchar的实际顶配21844字符: gbk下的varchar的实际顶配32766字符: -- 求出varchar在utf8和gbk下的实际最大长度: create table my_utf8( name varchar(65535) )charset utf8; create table my_gbk( name varchar(65535) )charset gbk; 提示长度太大并给出了最大长度。

根据给出的最大长度进行创建:

-- 求出varchar在utf8和gbk下的实际最大长度: create table my_utf8( name varchar(21845) )charset utf8; create table my_gbk( name varchar(32767) )charset gbk;

计算出最大长度:

-- 求出varchar在utf8和gbk下的实际最大长度: create table my_utf8( name varchar(21844) -- 应该为21844,所占字节21844*3+2=65532+2=65534 )charset utf8; create table my_gbk( name varchar(32766) -- 应该为32766,所占字节32766*3+2=65532+2=65534 )charset gbk;

如上计算出来了65534,还剩余一个字节,用完整个65535字节,增加一个tinyint字段:

增加一个tinyint发现失败: create table my_utf81( age tinyint, name varchar(21844) -- 应该为21844,所占字节21844*3+2=65532+2=65534 )charset utf8; create table my_gbk1( age tinyint, name varchar(32766) -- 应该为32766,所占字节32766*3+2=65532+2=65534 )charset gbk;

mysql记录中:如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL(想释放NULL所占用的字节,必须保证所有的字段都不允许为空)

-- 释放NULL create table my_utf82( age tinyint not null, name varchar(21844) not null )charset utf8; create table my_gbk2( age tinyint not null, name varchar(32766) not null )charset gbk;

mysql中text字符串,不占用记录长度,额外存储,但是text文本字符串也是属于记录的一部分,一定需要占据记录中的部分长度:10个字节(保存数据的地址和长度)

-- text占用10个字节长度 create table my_text( name varchar(21841) not null, content text )charset utf8; -- 解决问题证明了text占用10个字节 create table my_text( name varchar(21841) not null, -- 21841 * 3 + 2 = 65523 + 2 = 65525 content text not null -- 10 )charset utf8;

列属性:

列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。 列属性有很多:NULL/not NULL,default,Primary key,unique key,auto_increment,comment. 空属性: 两个值:NULL(默认的)和NOT NULL(不为空),虽然默认的数据库基本都是字段为空,但是实际上在真实开发的时候 尽可能的要保证所有的数据都不为空,空数据没有意义没办法参与运算。

创建一个实际案例表:班级表(名字,教室)

-- 创建班级表 create table my_class( name varchar(20) not null, -- 考虑实际边界值,不为空 room varchar(20) -- 不加not null,就是默认允许为空 )charset utf8;

列描述:

列描述:comment,描述,没有实际含义,是专门用来描述字段,会根据表创建语句保存; 来给数据库管理员来进行了解的(也即一些注释,我们写代码的时候要注意注释因为这个也是互相分享的,注重代码分格) -- 创建表 create table my_teacher( name varchar(20) not null comment '姓名', money decimal(10,2) not null comment '工资' )charset utf8; desc my_teacher; show create table my_teacher;

列属性(默认值):

默认值:某一种数据会经常性的出现某一个值。可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。 默认值关键字:default -- 默认值 create table my_default( name varchar(20) not null, age tinyint unsigned default 0, gender enum('男','女','保密') default '男' )charset utf8;

默认值的生效:在数据进行插入的时候,不给数据进行赋值。

-- 插入数据 insert into my_default (name) values('薛飞龙'); select * from my_default;

想要使用默认值,可以不一定去指定列表,故意不使用字段列表,可以使用default 关键字代替值。

insert into my_default values('项媛媛',18,default); select * from my_default;

转载请注明原文地址: https://www.6miu.com/read-5029153.html

最新回复(0)