SQL数据类型

数据类型

  • 整数类型
  • 浮点数类型
  • 定点数类型
  • 日期类型
  • 时间类型
  • 字符串类型
  • 二进制类型
  • ...

整数类型

  • MySQL 中 整数类型有5种
整数类型 字节数 无符号取值范围 有符号取值范围
tinyint 1 0~255 -128-127
smallint 2 0~65 535 -32 768-32 768
mediumint 3 0~16 777 215 -8 388 608-8 388 608
int 4 0~4 294 967 295 -2 147 483 648-2 147 483 648
bigint 5 0~18 446 744 073 709 551 615 -9 223 372 036 775 808 -9 223 372 036 775 808 -32 768

浮点数和定点数类型

  • MySQL 中使用浮点数和定点数存储小数
  • 浮点数类型
    • 单精度浮点数:float
    • 双精度浮点数:double
  • 定点数类型:decimal
数据类型 字节数 有符号的取值范围 无符号的取值范围
float 4 -3.402823466E+38~1.175 494 351E-38 0和1.175494351E-38~3.402 823 466E+38
double 8 -1797 693134 862 315 7E+308~2.225 073 858 507 2014E-308 022250738585072014E-308~1.797 693 134 862 315 7E+308
decimal M+2 -1.797 693 134 862 315 7E+308~2.225 073 858 507 201 4E-308 0和22250738585072014E-308~1.797 693 134 862 315 7E+308
  • 注意:decimal的有效范围是由 M 和 D决定的
    • M:表示数据的长度
    • D:表示小数点后的长度
    • 例如:数据类型为decimal(6,2)的数据6.2353,插入后的数据为6.23

字符串类型

  • MySQL 中 常用 char 和 varchar 表示字符串
  • varchar:存储可变长度的字符串
  • 例如:char(M) 或 varchar(M)
    • M:字符串的最大长度
    • 为char(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节。
    • 为 varchar(M)类型时,所对应的数据所占用的字节数为实际长度加1。
插入值 char(4) 存储需求 varchar(4) 存储需求
'' '' 4个字节 '' 1个字节
'ab' 'ab' 4个字节 'ab' 3个字节
'abc' 'abc' 4个字节 'abc' 4个字节
'abcd' 'abcd' 4个字节 'abcd' 5个字节
'abcdef' 'abcd' 4个字节 'abcd' 5个字节

文本类型

  • 表示文本数据,如:文章内容,评论/详情等
数据类型 存储范围
tinytext 0~255字节
text 0~65535字节
mediumtext 0~16777215字节
longtext 0~4294967295字节

日期与时间类型

  • 日期:YEAR、DATE、TIME、DATETIME
  • 时间:timestamp
数据类型 字节数 取值范围 日期格式 零值
year 1 1901-2155 YYYY 0000
date 4 1000-01-01-9999-12-3 YYYY-MMDD 0000-00-00
time 3 838.59:59~838:59.59 HH:MM:SS 00:00:00
datetime 8 1000-01-0100:00:00~9999-12-31 23:5959 YYYY-MMDDHH:MMSS 0000-00-0000:00:00
timestamp 4 1970-01-0100:00:01 ~2038-01-1903:14:07 YYYYMM-DDHH:MM:SS 0000-00-0000:00:00

1.year 类型

  • 三种格式 指定类型的值

(1)4位字符串

  • 范围:'1901'---'2155'或1901---2155
  • 例如:输人 '2019'或2019插人到数据库中的值均为2019。

(2)2位字符串

  • 范围:'00'---'99
    • '00'---'69'范围的值会被转换为 2000---2069范围的YEAR值
    • '70'---'99'范围的值会被转换为1970---1999范围的YEAR 值
  • 例如:输人'19'插人到数据库中的值为2019。

(3)2位数字

  • 范围:1---99
    • 1---69范围的值会被转换为2001--- 2069范围的YEAR值
    • 70---99范围的值会被转换为1970---1999范围的YEAR值
  • 例 如:输人19插入到数据库中的值为2019。

2.date类型

  • 日期值,4种 格式指定DATE类型的值

(1)'YYYY-MM-DD'或者'YYYYMMDD'字符串格式

  • 输人'2019-01-21'或'20190121',插人数据库中的日期都为2019-01-21

(2)'YY-MM-DD'或者'YYMMDD'字符串格式

  • YY:表示的是年
    • 范围:'00'---'99
      • '00'---'69'范围的值会被转换为 2000---2069范围的YEAR值
      • '70'---'99'范围的值会被转换为1970---1999范围的YEAR 值
  • 例如:输人'19-01-21'或'190121',插人数据库中的日期都为2019-01-21

(3)YY-MM-DD或者YYMMDD数字格式

  • 例如:输入19-01-21或190121,插人数据库中的日期都为2019-01-21。

(4)CURRENT_DATE或者NOW()

  • 表示当前系统日期。

3.time类型

  • 时间值
  • 形式,HH:MM:SS
    • HH:表示小时
    • MM:表示分
    • SS:表示秒
  • 三种格式指定time类型的值

(1)'D HH:MM:SS'字符串格式

  • D:表示日可取0---34之间的值
  • 例如:输入'2 11:30:50'插人数据库中的日期为59:30:50。

(2)'HHMMSS'字符串格式或者HHMMSS数字格式

  • 例如:输人'115454'或115454,插入数据库中的日期为11:54:54

(3)CURRENT_TIME或NOW()

  • 输人当前系统时间

3.datetime类型

  • 表示日期和时间
  • 形式为'YYYY-MM-DD HH: MM:SS'
    • YYYY:表示年
    • MM:表示月
    • DD:表示日
    • HH:表示小时
    • MM:表示分
    • SS: 表示秒
  • 4种格式指定DATETIME类型的值

(1)'YYYY-MM-DD HH:MM:SS'或者'YYYYMMDDHHMMSS'字符串格式

  • 表示的日期和时间
  • 例如:输人'2019-01-22 09:01:23'或 '20140122_0_90123'插人数据库中的 DATETIME 值都为 2019-01-22 09:01:23。

(2)'YY-MM-DD HH:MM:SS'或者'YYMMDDHHMMSS'字符串格式

  • 表示的日期和时间
  • YY:表示年,范围为'00'---'99',与date类型中的YY相同

(3)YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式

  • 表示日期
  • 例如:插入20190122090123或者190122090123,插人数据库中的DATETIME值都 为 2019-01-22 09:01:23。

(4)NOW

  • 输人当前系统的日期和时间

4.timestamp类型

  • 表示日期和时间
  • 显示形式与DATETIME相同但取值范围比DATETIME小

(1)CURRENT_TIMESTAMP

  • 使用CURRENT_TIMESTAMP输人系统当前日期和时间

(2)NULL

  • 输人NULL时系统会输人系统当前日期和时间

(3)无任何输人时系统会输入系统当前日期和时间

二进制类型

  • MySQL 中常用 blob村粗二进制类型的数据
  • 例如:图片、PDF文档等
数据类型 存储范围
tinyblob 0~255字节
blob 0~65 535字节
mediumblob 0~16 777 215字节
longblob 0~4 294 967 295字节
相关推荐
m0_748554817 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
早日退休!!!8 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
xcLeigh8 小时前
KES数据库性能优化实战
数据库·sql·性能优化·sql优化·数据性能
阿正呀8 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
yoyo_zzm8 小时前
Laravel9.x新特性全解析
数据库·mysql·nginx
2501_901200539 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
m0_4954964110 小时前
mysql处理复杂SQL性能_InnoDB优化器与MyISAM差异
jvm·数据库·python
forEverPlume10 小时前
PHP怎么使用Eloquent Attribute Composition属性组合_Laravel通过组合构建复杂属性【方法】
jvm·数据库·python
2301_8092047011 小时前
mysql在docker容器中如何部署_利用docker-compose快速启动
jvm·数据库·python
虹科网络安全11 小时前
艾体宝产品|深度解读 Redis 8.4 新增功能:原子化 Slot 迁移(上)
数据库·redis·bootstrap