关于MySQL字段类型
MySQL字段类型详解 MySQL提供了整数和浮点数的数值类型。可根据所要表示的值的范围选择相应的类型。 对于整数类型,如果指定了AUTO_INCREMENT 属性,则列必须为PRIMARY KEY 或UNIQUE 索引。将NULL 插入AUTO_INCREMENT 列将会插入一个大于该列中当前最大值的值。如果指定了UNSIGNED 属性,则相应的整数类型不允许取负值。 如果指定了ZEROFILL 属性,则用前导零填充数值类型值以达到列的显示宽度。 1. TINYINT[(M)] 说明:非常小的整数 允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取值范围:-128 到127(-27 到27-1),或者如果为U N S I G N E D,则0 到2 5 5(0 到2 8-1) 缺省值:如果列可为NULL;则为NULL;如果列为NOT NULL,则为0 存储需求:1字节 2. SMALLINT[(M)] 说明:小整数 允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取值范围:-32768 到3 27 6 7(-215 到215-1),或者如果为U N S I G N E D,则0 到6 5 5 3 5(0 到216-1)
缺省值:如果列可为NULL;则为NULL;如果列为NOT NULL,则为0 存储需求:2 字节 3. MEDIUMINT[(M)] 说明:中等大小的整数 允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取值范围:-8388608 到8 3 8 8 6 07(-22 3 到22 3-1),或者如果为U N S I G N E D,则0 到16 7 7 2 15(0 到22 4-1) 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0 存储需求:4 字节 4. INT[(M)] 说明:标准大小的整数 允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取值范围:-2147483648 到2 14 7 4 8 3 6 4 7(-231到2 3 1-1),或者如果为U N S I G N E D,则0 到4 2 9 4 9 6 7 2 9 5(0 到2 3 2-1) 缺省值:如果列为NULL,则为NULL;如果列为NOT FULL,则为0 存储需求:4 字节 同义词:I N T E G E R [(M)] 5. BIGINT[(M)] 说明:大整数 允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL 取值范围:-9223372036854775808 到9 2 2 3 3 7 2 0 3 6 8 5 4 7 7 5 8 07(-263 到2 6 3-1),或者如果为U N S I G N E D,则0 到18 4 4 6 7 4 4 07 3 7 0 9 5 5 16 15(0 到26 4 -1) 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0 存储需求:8 字节 6. FLOAT [(M, D)] 说明:小浮点数;单精度(精度小于D O U B L E) 允许的属性:Z E R O F I L L 取值范围:最小非零值为±1.75494351E -38; 最大非零值为±3 . 4 0 2 8 2 3 4 6 6 E + 3 8 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0 存储需求:4 字节 同义词:MySQL3.23 版以前,FLOAT(4) 为具有缺省M 和D 值的FLOAT的同义词。 注释:在MySQL3.23 以后,FLOAT(4) 为真浮点类型(值存储为硬件所允许的完整精度,而不四舍五入为缺省的小数位数) 7. DOUBLE[(M, D)] 说明:大浮点数;双精度(比FLOAT更精确) 允许的属性:Z E R O F I L L 取值范围:最小非零值为±2 . 2 2 5 07 3 8 5 8 5 07 2 0 14 E -308; 最大非零值为±1。7 9 7 6 9 3 13 -4 8 6 2 3 15 7 E + 3 0 8 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0 存储需求:8 字节 同义词:DOUBLE PRECISION[(M, D)] 和R E A L [ (M, D)] 为D O U B L E [(M, D)] 的同义词。MySQL3.23 版以前,FLOAT(8) 为具有缺省M 和D 值的FLOAT的同义词。 注释:在MySQL3.23 以后,FLOAT(8) 为真浮点类型(值存储为硬件所允许的完整精度,而不四舍五入为缺省的小数位数)。 8. DECIMAL(M, D) 说明:存储为串的浮点数(每位数字、小数点或“-”号都占1字节)。 允许的属性:Z E R O F I L L 取值范围:最大取值范围与DOUBLE 相同;给定DECIMAL 类型的有效取值范围由M和D 决定。如果D 为零,则列值无小数点或小数部分。 缺省值:如果列可为NULL,则为NULL,如果列为NOT NULL,则为0 存储需求:对于MySQL3.23 前的版本,为M 字节,而MySQL3.23 以后的版本,为M+ 2 字节。 同义词:N U M E R I C (M, D) 注释:在MySQL3.23 以后,M 的值为符合ANSI SQL 标准,不包括符号字符或小数点所占的字节数。
MYSQL串类型 MySQL的串类型常用来存储文本,它不但是通用的而且还能存储任何数据。可用串类型来存储最大长度可变的值,而且可以选择在处理值时是否区分大小写。 1. CHAR(M) 说明:0 到M 字节长的定长字符串。在MySQL3.23 版以前,M 应该为一个1到255 之间的整数。而MySQL3.23 版以后,M 应该为一个0 到255 之间的整数。短于M 个字符的串存储进右边补空格。长于M 个字符的串存储时剪断为长度是M 的串。在检索值时,去掉后跟的空格。 允许的属性:B I N A RY 允许的长度:0 到M 字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:M 字节 比较:不区分大小写(如果具有B I N A RY 属性,则区分大小写) 2. VARCHAR(M) 说明:0 到M 字节长的可变长字符串。M 应该为1到255 之间的一个整数,或者自MySQL3.23 后为0 到255 之间的一个整数。存储时后跟的空格被去掉。存储时,大于M 个字符的串剪断为M 个字符。 允许的属性:B I N A RY 允许的长度:0 到M 字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度,加上1字节用来记录长度 比较:不区分大小写(如果具有B I N A RY 属性,则区分大小写) 3. TINYBLOB 说明:小BLOB 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到2 5 5(0 到28-1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的1个字节 比较:区分大小写 4. BLOB 说明:常规大小的BLOB 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到6 5 5 3 5(0 到216-1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的2 个字节 比较:区分大小写 5. MEDIUMBLOB 说明:中等大小的BLOB 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到16 7 7 7 2 15(0 到224 -1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的3 个字节 比较:区分大小写 6. LONGBLOB 说明:大BLOB 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到4 2 9 4 9 6 7 2 9 5(0 到23 2-1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的4 个字节 比较:区分大小写 7. TINYTEXT 说明:小TEXT 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到2 5 5(0 到2 8 -1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的2 个字节 比较:不区分大小写 8. TEXT 说明:常规大小的TEXT 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到6 5 5 3 5(0 到216-1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的2 个字节 比较:不区分大小写 9. MEDIUMTEXT 说明:中等大小的TEXT 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到16 7 7 7 2 15(0 到22 4-1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的3 个字节 比较:不区分大小写 10. LONGTEXT 说明:大TEXT 值 允许的属性:除通用属性外无其他属性 允许的长度:0 到4 2 9 4 9 6 7 2 9 5(0 到23 2-1)字节 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“” 存储需求:值的长度加上用于记录长度的4 个字节 比较:不区分大小写 11. ENUM(“v a l ue 1”, “v a l ue 2”, ...) 说明:枚举,列值可赋予值列表中的某个成员 允许的属性:除通用属性外无其他属性 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为第一个枚举值 存储需求:对1到255 个成员的枚举1个字节,对255 到65535 个成员的枚举2 个字节 比较:不区分大小写(MySQL3.22.1版以前区分大小写) 12. SET(“v a l ue 1”,“v a l ue 2”, ...) 说明:集合,列值可赋予值列表中的零个或多个成员 允许的属性:除通用属性外无其他属性 缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”(空集) 存储需求:1字节(1到8个成员的集合),2字节(9 到16个成员的集合),3字节(17到2 4个成员的集合),4 字节(2 5到3 2个成员的集合)或8字节(3 3到6 4个成员的集合) 比较:不区分大小写(MySQL3.22.1版以前区分大小写)
mysqlunsigned用法
mysqlunsigned用法MySQL中Unsigned是一种数据类型修饰符,它可以用来指定一个列或变量的数据类型为无符号整数类型。
Unsigned的作用是将有符号整数的取值范围从负数扩展到正数,使得该列或变量能够表示更大的非负整数。
在MySQL中,Unsigned可以用于以下数据类型:1. TINYINT:表示一个范围为0到255的整数。
2. SMALLINT:表示一个范围为0到65535的整数。
3. MEDIUMINT:表示一个范围为0到16777215的整数。
4. INT:表示一个范围为0到4294967295的整数。
5. BIGINT:表示一个范围为0到18446744073709551615的整数。
Unsigned类型以u或U结尾,例如TINYINT UNSIGNED。
Unsigned类型在一些场景下非常有用,例如存储IP地址或者存储一些大的时间戳,因为它们都是非负整数,而且Unsigned类型的列或变量占用的存储空间比有符号整数类型的列或变量少一半,这意味着更少的磁盘空间和更快的数据读写速度。
Unsigned类型的使用也有一些限制。
首先,Unsigned类型不能存储负数,因此如果需要存储负数,应该使用有符号整数类型。
其次,如果一个Unsigned类型的列或变量被赋值了一个负数,MySQL将会将它转换为一个对应的无符号整数,这可能会导致一些意想不到的结果。
因此,在使用Unsigned类型时,应该特别小心。
下面是一个Unsigned类型的实例:CREATE TABLE test (id INT UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(50) NOT NULL);在上面的示例中,id列被指定为Unsigned类型的INT整数,因此它只能存储非负整数。
注意,在定义Unsigned类型的列或变量时,关键词UNSIGNED必须放在数据类型后面,而且不能与NOT NULL一起使用。
MySQL(二)数据库数据类型详解
MySQL(⼆)数据库数据类型详解 序⾔ 今天去健⾝了,感觉把⾝体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这⾥讲清楚了,以后在看到什么数据类型,咱度应该认识,下⾯就跟着我的节奏去把这个拿下吧。
---WZY⼀、数据类型 MySQL的数据类型有⼤概可以分为5种,分别是整数类型、浮点数类型和定点数类型、⽇期和时间类型、字符串类型、⼆进制类型。
现在可以来看看你对这5种类型的熟悉程度,哪个看起来懵逼了,那就说明⾃⼰哪个不熟悉,不理解。
注意:整数类型和浮点数类型可以统称为数值数据类型,这不难理解。
数值数据类型 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 浮点数类型:FLOAT、DOUBLE 定点⼩数:DECIMAL ⽇期/时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP 字符串类型 CHAR、VARCHAR、TEXT、ENUM、SET等 ⼆进制类型 BIT、BINARY、VARBINARY、BLOB 1、整数类型 不管你学什么语⾔,在基础⽅⾯,都应该知道 1个字节= 8位⼆进制数。
每个类型的取值范围也就能够知道,⽐如TINYINT占⽤1个字节,也就是8位,2的8次⽅减1等于255,也就是说如果代表没符号的整数,该取值范围为0~255,如果是有符号的,最⾼位为符号号位,也就是2的7次⽅减1,也就是127,取值范围为-128~127,为什么需要减1,这个问题就需要考虑临界值的问题了。
⽽考虑临界值问题⼜有需要讨论原码补码反码的知识,这些度不是我们讨论的重点,所以在这就⾃⾏百度。
给出⼀张范围表,给⼤家做参考。
不同整数类型的取值范围 根据⾃⼰所需去选取不同的类型名称, 例如: CREATE TABLE aaa( id INT(10) PRIMARY KEY, age INT(6) ); 这个例⼦中INT(10)、INT(6) 括号中的数字表⽰的是该数据类型指定的显⽰宽度,指定能够显⽰的数值中数字的个数。
MYSQL数据类型——字符串类型
MYSQL数据类型——字符串类型⼀、字符串类型在SQL中,将字符串类型分成了6类:char,varchar,text,blob,enum和set。
1.1 定长字符串定义:char,磁盘(⼆维表)在定义结构的时候,就以及确定了最终数据的存储长度。
Char(L): L代表length,可以存储的长度,单位为字符,最⼤长度值可以为255.Char(4):在UTF8环境下,需要4*3=12个字节。
1.2 变长字符串定义:varchar,在分配空间的时候,按照最⼤的空间分配,但是实际上最终⽤了多少,是根据具体的数据来确定。
Varchar(L): L表⽰字符长度,理论长度是65536个字符,但是会多出1到2个字节来确定存储的实际长度Varchar(10): 的确存了10个汉字,UTF8环境,10*3+1=31存储了3个汉字,UTF8环境,3*3+1=10(bytes)定长与变长的存储实际空间(UTF8)存储实际空间Char(4)Varchar(4)Char占⽤字节Varchar占⽤字节ABCD ABCD ABCD4*3=124*3+1=13A A A4*3=121*3+1=4ABCDE××数据超过长度数据超过长度如何选择定长或者是变长字符串呢?定长的磁盘空间⽐较浪费,但是效率⾼:如果数据基本上确定长度都⼀样,就是使⽤定长,如:⾝份证,电话号码,⼿机号码等变长的磁盘空间⽐较节省,但是效率低:如果数据不能确定长度(不同数据有变化),如姓名、地址等。
1.3 ⽂本字符串如果数据量⾮常⼤,通常说超过255个字符就会使⽤⽂本字符串⽂本字符串根据存储的格式进⾏分类:text和blobText: 存储⽂字(⼆进制数据实际上都是存储路径)Blob: 存储⼆进制数据(通常不⽤)1.4 枚举字符串枚举定义:enum,事先将所有可能出现的结果都设计好,实际上存储的数据都必须是规定好的数据中的⼀个。
枚举的使⽤⽅式定义:enum(可能出现的元素列表); //如 enum(‘男’,‘⼥’,‘不男不⼥’,‘妖’,‘保密’);使⽤:存储数据,只能存储上⾯定义好的数据(a) 创建枚举表1CREATE TABLE my_enum(gender enum('男','⼥','保密')) charset utf8;(b)加⼊数据作⽤之⼀:规范数据格式;数据只能是规定的数据的其中⼀个1insert into my_enum values('男'),('保密'); --有效数据2insert into my_enum values('male'); --错误数据(没有male元素)(b)作⽤之⼆:节省存储空间(枚举通常有⼀个别名:单选框):枚举实际存储的是数值⽽不是字符串本⾝。
MySQL数据类型(最大值和最小值)
MySQL数据类型(最⼤值和最⼩值)MySQL数据类型(最⼤值和最⼩值)1、整型MySQL数据类型含义(有符号)tinyint(m)1个字节范围(-128~127)smallint(m)2个字节范围(-32768~32767)mediumint(m)3个字节范围(-8388608~8388607)int(m)4个字节范围(-2147483648~2147483647)bigint(m)8个字节范围(+-9.22*10的18次⽅)取值范围如果加了unsigned,则最⼤值翻倍,如tinyint unsigned的取值范围为(0~255)。
int(m)⾥的m是表⽰SELECT查询结果集中的显⽰宽度,不知道这个m有什么⽤。
int 占10位,存不了⼿机号(11位)2、浮点型(float和double) 浮点型在数据库中存放的是近似值MySQL数据类型含义float(m,d)单精度浮点型 8位精度(4字节) m总个数,d⼩数位double(m,d)双精度浮点型 16位精度(8字节) m总个数,d⼩数位设⼀个字段定义为float(5,3),如果插⼊⼀个数123.45678,实际数据库⾥存的是123.457,但总个数还以实际为准,即6位。
3、定点数定点类型在数据库中存放的是精确值浮点型在数据库中存放的是近似值,⽽定点类型在数据库中存放的是精确值。
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是⼩数位。
4、字符串(char,varchar,_text)MySQL数据类型含义char(n)固定长度,最多255个字符varchar(n)可变长度,最多65535个字节tinytext可变长度,最多255个字符text可变长度,最多65535个字符mediumtext可变长度,最多2的24次⽅-1个字符longtext可变长度,最多2的32次⽅-1个字符。
多选框在mysql中怎么设计字段
引言概述多选框是一种常用的用户界面元素,它允许用户从多个选项中选择多个或多个选项。
在数据库设计中,经常需要存储多选框所选择的值。
本文将介绍如何在MySQL数据库中设计字段以存储多选框值的最佳实践。
正文内容1.字段类型选择1.1ENUM类型1.1.1ENUM类型是一种非常适合存储少量固定选项的字段类型。
我们可以将多选框中的选项作为ENUM类型的值,然后在数据库中存储一个或多个选中的选项。
1.1.2优点:存储空间小、性能好,且适用于固定选项的情况。
1.1.3缺点:ENUM类型在某些情况下可能不太灵活,当选项需要频繁变动时,不建议使用ENUM类型。
1.2SET类型1.2.1SET类型是一种适合存储多选框选项的值得字段类型。
SET类型允许存储多个选中项的值,并在数据库中以二进制方式表示。
1.2.2优点:存储空间小,容易管理,适用于相对较少的选项数量。
1.2.3缺点:SET类型不适合存储大量的选项,因为它的存储方式会占用更多的空间。
2.字段命名和注释2.1为了增加数据库的可维护性和查询可读性,建议为多选框字段选择一个清晰明确的字段名。
字段名应该与多选框的含义相符,并能够清楚地传达字段存储的是什么内容。
2.2为多选框字段添加注释是一种良好的实践。
注释应该提供字段的相关信息,例如字段的含义、选项的含义等。
3.数据库设计3.1推荐将多选框字段作为表的一个独立字段进行设计。
这样做可以使表结构更加清晰,有助于数据的维护和更正。
3.2如果多选框字段与其他字段之间有关联关系,则可以考虑将其放在一个单独的关联表中,并通过外键与主表进行关联。
4.数据查询与过滤4.1查询含有某个选项的记录:可以使用MySQL的FIND_IN_SET 函数来查询包含某个选项的记录。
FIND_IN_SET函数可以检查给定值是否在SET类型字段中。
4.2查询包含任意选项的记录:可以使用MySQL的位运算符来查询包含任意选项的记录。
通过将每个选项与相应的位运算符进行AND运算,然后检查结果是否为0,即可得到包含任意选项的记录。
mysql命令行命令和SQL语句,MySQL修改删除增加字段类型,字段数据等。
mysql命令⾏命令和SQL语句,MySQL修改删除增加字段类型,字段数据等。
⼀ . 常⽤mysql命令⾏命令1 .启动MYSQL服务 net start mysql停⽌MYSQL服务 net stop mysql2 . netstat –na | findstr 3306 查看被监听的端⼝ , findstr⽤于查找后⾯的在端⼝是否存在3 . 在命令⾏中登陆MYSQL控制台 , 即使⽤ MYSQL COMMEND LINE TOOL语法格式 mysql –user=root –password=123456 db_name或 mysql –uroot –p123456 db_name4 . 进⼊MYSQL命令⾏⼯具后 , 使⽤status; 或\s 查看运⾏环境信息5 . 切换连接数据库的语法 : use new_dbname;6 . 显⽰所有数据库 : show databases;7 . 显⽰数据库中的所有表 : show tables;8 . 显⽰某个表创建时的全部信息 : show create table table_name;9 . 查看表的具体属性信息及表中各字段的描述Describe table_name; 缩写形式 : desc table_name;⼆ . MySql中的SQL语句1 . 数据库创建 : Create database db_name;数据库删除 : Drop database db_name; 删除时可先判断是否存在,写成 : drop database if exits db_name2 . 建表 : 创建数据表的语法 : create table table_name (字段1 数据类型 , 字段2 数据类型);例 : create table mytable (id int , username char(20));删表 : drop table table_name; 例 : drop table mytable;8 . 添加数据 : Insert into 表名 [(字段1 , 字段2 , ….)] values (值1 , 值2 , …..);如果向表中的每个字段都插⼊⼀个值,那么前⾯ [ ] 括号内字段名可写也可不写例 : insert into mytable (id,username) values (1,’zhangsan’);9 . 查询 : 查询所有数据 : select * from table_name;查询指定字段的数据 : select 字段1 , 字段2 from table_name;例 : select id,username from mytable where id=1 order by desc;多表查询语句------------参照第17条实例10 . 更新指定数据 , 更新某⼀个字段的数据(注意,不是更新字段的名字)Update table_name set 字段名=’新值’ [, 字段2 =’新值’ , …..][where id=id_num] [order by 字段顺序]例 : update mytable set username=’lisi’ where id=1;Order语句是查询的顺序 , 如 : order by id desc(或asc) , 顺序有两种 : desc倒序(100—1,即从最新数据往后查询),asc(从1-100)Where和order语句也可⽤于查询select 与删除delete11 . 删除表中的信息 :删除整个表中的信息 : delete from table_name;删作表中指定条件的语句 : delete from table_name where 条件语句 ; 条件语句如 : id=3;12 . 创建数据库⽤户CREATE USER username1 identified BY ‘password’ , username2 IDENTIFIED BY ‘password’….⼀次可以创建多个数据库⽤户13 . ⽤户的权限控制:grant库,表级的权限控制 : 将某个库中的某个表的控制权赋予某个⽤户Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ];14 . 表结构的修改① 增加⼀个字段格式:alter table table_name add column (字段名字段类型); ----此⽅法带括号指定字段插⼊的位置:alter table table_name add column 字段名字段类型 after 某字段;②删除⼀个字段:alter table table_name drop字段名;③ 修改字段名称/类型alter table table_name change 旧字段名新字段名新字段的类型;④ 改表的名字alter table table_name rename to new_table_name;⑤ ⼀次性清空表中的所有数据truncate table table_name; 此⽅法也会使表中的取号器(ID)从1开始15 . 增加主键,外键,约束,索引。
mysql基本数据类型
mysql基本数据类型MySQL是一种关系型数据库管理系统,它支持多种数据类型。
MySQL的数据类型分为数值类型、日期和时间类型、字符串类型、二进制类型。
以下是MySQL基本数据类型(注意:各类型数据的存储要占用的字节数,不同的数据库系统、不同的编译选项这些大小限制和取值范围有所不同):1. 数值类型MySQL数值类型有整数类型和小数类型两种:1.1 整数类型- TINYINT:有符号范围为-128~127,无符号范围0~255。
占用1个字节。
- SMALLINT:有符号范围为-32768~32767,无符号范围0~65535。
占用2个字节。
- MEDIUMINT:有符号范围为-8388608~8388607,无符号范围0~16777215。
占用3个字节。
- INT:有符号范围为-2147483648~2147483647,无符号范围0~4294967295。
占用4个字节。
- BIGINT:有符号范围为-9223372036854775808~9223372036854775807,无符号范围0~18446744073709551615。
占用8个字节。
1.2 小数类型- FLOAT:单精度浮点数,占用4个字节。
- DOUBLE:双精度浮点数,占用8个字节。
- DECIMAL:高精度浮点数,依赖于实际存储的数字大小而变化。
2. 日期和时间类型MySQL日期和时间类型包括DATE、TIME、DATETIME、YEAR和TIMESTAMP:- DATE:日期,存储的范围为'1000-01-01'到'9999-12-31'。
占用3个字节。
- TIME:时间,存储的范围为 '-838:59:59'到 '838:59:59'。
占用3个字节。
- DATETIME:日期时间,存储范围为 '1000-01-01 00:00:00'到 '9999-12-31 23:59:59'。
mysql datetime类型字段索引原理
mysql datetime类型字段索引原理
MySQL中的DATETIME类型字段索引的原理是将DATETIME值转换为一个整数值进行存储和比较,以提高查询效率。
具体实现方式有以下几种:
1. 哈希索引:将DATETIME值转换为一个整数值后,根据这个整数值的哈希值构建索引。
哈希索引可以通过哈希函数快速定位需要查询的数据。
但是,哈希索引不支持范围查询,只能进行等值查询。
2. B树索引:将DATETIME值转换为一个整数值后,按照整数值的大小进行排序构建索引。
B树索引支持范围查询,可以快速找到满足条件的数据。
B树索引在数据量较大时,会占用更多的存储空间,并且插入、删除操作可能会导致索引结构的重构。
在使用DATETIME类型字段索引时,需要注意以下几点:
1. 尽量避免在WHERE子句中对DATETIME类型字段进行函数操作,例如使用DATE()函数进行日期比较。
这会导致MySQL无法使用索引进行查询优化。
2. 使用合适的索引策略。
对于需要进行范围查询的情况,使用B树索引;对于只需要进行等值查询的情况,使用哈希索引。
3. 在批量插入数据时,可以先禁用索引,待数据插入完毕后再启用索引。
这样可以减少索引的维护开销,提高插入数据的性能。
总的来说,使用DATETIME类型字段索引可以大大提高查询效率,但需要根据具体情况选择合适的索引类型和优化策略。
mysql 字符串长度 规则
mysql 字符串长度规则MySQL 字符串长度规则在 MySQL 数据库中,字符串长度规则是指对于不同的字符类型,其长度限制和存储方式。
1. VARCHAR 类型:- VARCHAR 类型表示可变长度的字符数据。
- 最大长度为 65,535 字节。
- 实际占用的存储空间为实际数据长度加上额外的空间开销(1-2 字节)。
- 适合存储长度可变的文本内容。
2. CHAR 类型:- CHAR 类型表示固定长度的字符数据。
- 最大长度为 255 字节。
- 实际占用的存储空间是固定的,如果字符串长度不足指定长度,会使用空格进行填充。
- 适合存储长度固定的文本内容。
3. TEXT 类型:- TEXT 类型用于存储较长的文本数据。
- 最大长度为 65,535 字节。
- 不同于 VARCHAR 和 CHAR,TEXT 类型的存储空间是独立的,不受表的行大小限制。
- 适合存储大段文本、文章等长度不确定的内容。
需要注意的是,在使用 VARCHAR 和 CHAR 类型时,应根据实际需求合理设置字段的最大长度,以节省存储空间和提高性能。
同时,不要过度使用 TEXT 类型,因为它会对查询和索引性能产生一定的影响。
除了上述基本的字符串长度规则外,还可以通过设置字符集和校对规则来控制字符串的存储方式和排序规则。
例如,可以通过设置字符集为 utf8mb4,使用utf8mb4_general_ci 校对规则来支持存储和排序各种语言的字符。
总结:MySQL 中的字符串长度规则包括 VARCHAR、CHAR 和 TEXT 类型,每种类型有不同的长度限制和存储方式。
合理设置字符串字段的最大长度以及字符集和校对规则对于数据库的性能和存储空间都是重要的。
MySQL中tinytext、text、mediumtext和longtext详解
MySQL 中tinytext 、text 、mediumtext 和longtext 详解⼀、数字类型类型范围说明Char(N) [binary]N=1~255 个字元binary :分辨⼤⼩写固定长度std_name cahr(32) not null VarChar(N) [binary]N=1~255 个字元binary :分辨⼤⼩写可变长度std_address varchar(256)TinyBlob 最⼤长度255个字元(2^8-1)Blob (Binary large objects)储存⼆进位资料,且有分⼤⼩写memo text not null TinyText 最⼤长度255个字元(2^8-1)Blob 最⼤长度65535个字元(2^16-1)Text 最⼤长度65535个字元(2^16-1)MediumBlob 最⼤长度 16777215 个字元(2^24-1)MediumText 最⼤长度 16777215 个字元(2^24-1)LongBlob 最⼤长度4294967295个字元(2^32-1)LongText 最⼤长度4294967295个字元(2^32-1)Enum 集合最⼤数⽬为65535列举(Enumeration),Enum 单选、Set 复选sex enum(1,0)habby set(‘玩电玩’,'睡觉’,'看电影’,'听⾳乐’)Set集合最⼤数⽬为64辨別Null 与Not Null :Null 为允许储存空值(Null)⼆、数值类型范围说明例如TinyInt[M] [UNSIGNED]-128~127UNSIGNED : 0~255 num tinyint unsigned SmallInt[M] [UNSIGNED]-32768~32767UNSIGNED :0~ 65535 MediumInt[M] [UNSIGNED]-8388608~8388607UNSIGNED :0~16777215 Int[M] [UNSIGNED]-2^31~2^31-1UNSIGNED : 0~2^32 BigInt[M] [UNSIGNED]-2^63~2^63-1UNSIGNED : 0~2^64Float [(M,D)]-3.4E+38~3.4E+38( 约 )注: M 为长度, D 为⼩数,Float 4 bytes,Double 8bytesDouble [(M,D)]-1.79E+308~1.79E+308( 约 )Decimal [(M,D)]辨別ZeroFill :当宣告关键字ZeroFill 为⾃动填满0,如 000021三、⽇期时间类型范围说明Date ⽇期(yyyy-mm-dd)Time 时间(hh:mm:ss)DateTime ⽇期与时间組合(yyyy-mm-dd hh:mm:ss)TimeStamp yyyymmddhhmmssYear年份yyyy。
