MySQL 类型

基本类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

字符串

字符串类型:charvarcharbinaryvarbinaryblobtextenumset

参考
官网:The CHAR and VARCHAR Types

类型大小用途
char0-255 字节定长字符串
varchar0-6 5535 字节变长字符串
tinyBlob0-255 字节不超过 255 个字符的二进制字符串
tinyText0-255 字节短文本字符串
blob0-6 5535 字节二进制形式的长文本数据
text0-6 5535 字节长文本数据
mediumBlob0-1677 7215 字节二进制形式的中等长度文本数据
mediumText0-1677 7215 字节中等长度文本数据
longBlob0-42 9496 7295 字节二进制形式的极大文本数据
longText0-42 9496 7295 字节极大文本数据

1、char(n) 固定长度,无论实际使用几个字符,都将占用n个字节(存储时,实际字符数小于n时右边以空格补足,查询之时再将空格去掉)。所以char类型存储的字符串末尾不能有空格。
2、varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
3、text类型不能有默认值。varchar可直接创建索引,text创建索引要指定前多少个字符。

长度

-- length():返回字符串所占的字节数(受编码影响)
-- char_length():返回字符串中的字符数
select length('中国'), char_length('中国'); -- 6、2

字节与字符

字符与字节它们完全不是一个位面的概念,所以两者之间没有“区别”这一说法。在不同编码里,字符和字节的对应关系是不同的。
字节:1个字节(Byte)等于8个bit位,每个bit位是0/1两种状态,也就是说一个字节可以表示256个状态,计算机里用字节来作为最基本的存储单位。
字符:在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息。字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。
①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。
文本符号:英文标点占一个字节,中文标点占两个字节。
④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。
⑥GBK编码中,一个英文字符等于一个字节,一个中文(含繁体)等于两个字节。
注:GB2312 是对 ASCII 的中文扩展,而GBK 包括了 GB2312 的所有内容(GBK 比 GBK2312 多出近20000个新的汉字,包括繁体字和符号)。

varchar(50)和varchar(100)是否一样

硬盘存储需求一样,内存需求不一样。即对于VARCHAR数据类型来说,硬盘上的存储空间是根据实际字符长度来分配存储空间的,而对于内存来说,是使用N个字符空间的内存块来保存值,即varchar(50)占用50个字符内存空间,varchar(100)占用100个字符内存空间。

数值

数值类型:tinyIntsmallIntmediumIntintbigIntfloatdouble

类型大小范围(有符号)范围(无符号)用途
tinyInt1 字节(-128,127)(0,255)小整数值
smallInt2 字节(-32 768,32 767)(0,65 535)大整数值
mediumInt3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
int或integer4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
bigInt8 字节极大整数值
float4 字节单精度浮点数值
double8 字节双精度浮点数值
decimal8 字节双精度浮点数值

1、为了避免数据库被过度设计,布尔、枚举类型常常采用tinyint。

日期/时间

日期和时间类型:datetimedatetimestamptimeyear

类型大小范围格式用途
date3 字节1000-01-01/9999-12-31YYYY-MM-DD日期值
time3 字节‘-838:59:59’/’838:59:59’HH:MM:SS时间值或持续时间
year1 字节1901/2155YYYY年份值
datetime8 字节1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp4 字节1970-01-01 00:00:00/2038YYYYMMDD HHMMSS混合日期和时间值,时间戳

timestamp:结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07。

类型转换

CAST(value AS TYPE); 
CONVERT(value, TYPE);

可以转换的类型是有限的,应是以下值其中的一个:

  • 二进制,同带binary前缀的效果 : BINARY
  • 字符型,可带参数 : CHAR()
  • 日期 : DATE
  • 时间: TIME
  • 日期时间型 : DATETIME
  • 浮点数 : DECIMAL
  • 整数 : SIGNED
  • 无符号整数 : UNSIGNED
// 比如字符串转数字(三种方式):
// 方法一:ORDER BY '123' + 0;(首推)
// 方法二:ORDER BY CAST('123' AS SIGNED);
// 方法三:ORDER BY CONVERT('123', SIGNED);

约束类型

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
MYSQL中,常用的几种约束:

  • 主键:primary key
  • 外键:foreign key
  • 唯一:unique
  • 非空:not null
  • 自增:auto_increment
  • 默认值 :default

主键约束 primary key

主键约束相当于唯一约束 + 非空约束的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

-- 基本模式
create table temp( 
    id int primary key,
    name varchar(20)
);

-- 组合模式
create table temp(
    id int ,
    name varchar(20),
    pwd varchar(20),
    primary key(id, name)
);

-- 删除主键约束
alter table temp drop primary key;

-- 添加主键约束
alter table temp add primary key(id,name);

-- 修改主键约束
alter  table temp modify id int primary key

外键约束 foreign key

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。

-- 基本模式
-- 主表
create table temp(
id int primary key,
name varchar(20)
);

-- 副表
create table temp2(
id int,
name varchar(20),
classes_id int,
foreign key(id) references temp(id)
);

-- 多列外键组合,必须用表级别约束语法
-- 主表
create table classes(
id int,
name varchar(20),
number int,
primary key(name,number)
);

-- 副表
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/*表级别联合外键*/
foreign key(classes_name, classes_number) references classes(name, number) 
);

-- 删除外键约束
alter table student drop foreign key student_id;

-- 增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);

唯一约束 unique

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null。
同一个表可以有多个唯一约束,多个列组合的约束。
在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

-- 创建表时设置,表示用户名、密码不能重复
    create table temp(
    id int not null ,
    name varchar(20),
    password varchar(10),
    unique(name,password)
);


-- 添加唯一约束
alter table temp add unique (name, password);


-- 修改唯一约束
alter table temp modify name varchar(25) unique;

-- 删除约束
alter table temp drop index name;

非空约束 not null 与 默认值 default

非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

Null类型特征:
  所有的类型的值都可以是null,包括int、float 等数据类型

-- 创建table表,ID 为非空约束,name 为非空约束 且默认值为abc
create table temp(
           id int not null,
           name varchar(255) not null default  'abc',
           sex char null
);


-- 增加非空约束
alter table temp
modify sex varchar(2) not null;

-- 取消非空约束
alter table temp modify sex varchar(2) null;

-- 取消非空约束,增加默认值
alter table temp modify sex varchar(2) default 'abc' null;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mysql类型转换是指将一个数据类型转换为另一个数据类型的过程。在Mysql中,可以使用CAST和CONVERT函数来实现类型转换。根据引用中的描述,以下是一些常见的Mysql类型转换示例: - 将Mysql转换成字符串:使用CAST函数将字段名转换为CHAR类型,例如:SELECT CAST(字段名 AS CHAR) FROM DUAL; 这将把字段值转换为字符串格式。 - 将Mysql转换成日期:使用CAST函数将字段名转换为DATE类型,例如:SELECT CAST(字段名 AS DATE) FROM DUAL; 这将把字段值转换为'YYYY-MM-DD'格式的日期。 - 将Mysql转换成时间:使用CAST函数将字段名转换为TIME类型,例如:SELECT CAST(字段名 AS TIME) FROM DUAL; 这将把字段值转换为'HH:MM:SS'格式的时间。 - 将Mysql转换成日期时间:使用CAST函数将字段名转换为DATETIME类型,例如:SELECT CAST(字段名 AS DATETIME) FROM DUAL; 这将把字段值转换为'YYYY-MM-DD HH:MM:SS'格式的日期时间。 - 将Mysql转换成浮点数:使用CAST函数将字段名转换为DECIMAL类型,例如:SELECT CAST(字段名 AS DECIMAL(10,3)) FROM DUAL; 这将把字段值转换为浮点数格式。 - 将Mysql转换成整数:使用CAST函数将字段名转换为SIGNED类型,例如:SELECT CAST(字段名 AS SIGNED) FROM DUAL; 这将把字段值转换为有符号的整数格式(四舍五入)。 - 将Mysql转换成无符号整数:使用CAST函数将字段名转换为UNSIGNED类型,例如:SELECT CAST(字段名 AS UNSIGNED) FROM DUAL; 这将把字段值转换为无符号的整数格式(四舍五入)。 综上所述,这些是Mysql中常用的类型转换方法。根据您的需求和具体情况,可以选择合适的类型转换函数来实现所需的转换。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mysql 类型转换](https://blog.csdn.net/weixin_42537012/article/details/126187698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [mysql数据类型转换](https://blog.csdn.net/yetaodiao/article/details/127369674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Mysql隐式类型转换原则](https://download.csdn.net/download/weixin_38701640/13689877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值