常见数据库基本数据类型整理

本文详细介绍了ORACLE、DB2、MySQL及SQLSERVER等主流数据库系统的数据类型,包括字符、数字、日期时间、大对象等各类数据类型的特点及使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORACLE数据库类型

 

字符类型
char[(length)] 定长字符 最长2000字节
varchar2[(length)] 可变长度的字符数据类型,最长4000字节
NCHAR[(length)] 固定长度的字符数据类型,由国际字符语言(national language Support,NLS)字符集字符组成,最长2000字节
LONG 可变长度的字符数据类型 最长2GB
RAW 原始的二进制数据类型,最长2000字节
long raw 原始的二进制数据类型,最长2GB
rawid 数据库中一窜12字节地址,用于定位磁盘上某一行及其所指向的对象
urawid 通用的rawid,用于表,是一种行主键的表示

大对象
blob 大原始二进制对象,最大长度4GB
clob 大字符对象,最大长度4GB
nclob 由NLS字符集字符组成的大字符数据,最长长度4GB
bfile 提供对存储在oracle数据库之外的操作系统文件中的二进制文件访问,最大4GB

日期类型
date 定宽的7字节的日期/时间数据类型,包含7个属性:世纪、年、月、天、小时、分、秒

timestamp 7字节或12字节的定宽日期/时间数据类型,与DATE不同时可以包含小数秒,小数点最多可保留9位

timestamp with time zorn 提供对时区的支持

timestamp with local time zorn 对时区敏感的时间类型

interal year to month 存储年月段,可对date和timestamp类型进行加减运算

interval day to second 存储天/小时/分/秒时间段,支持9位小数秒

数据类型
number[(precision[,scale])] 范围1~38
   精度(precision) 数字中的数字位数
   尾数(scale) 小数点右边的数字位
  
   oralce只提供一种数字类型:NUMBER 类型,oracle中存储的所有数字数据多可当作number类型(10g后 支持binary_float,binary_double)。下面数据类型可与ANSI SQL兼容:
   /**
   ANSI SQL :美国国家标准化组织(ANSI)”是一个核准多种行业标准的组织。SQL作为关系型数据库所使用的标准语言,最初是基于IBM的实现在1986年被批准的。1987年,“国际标准化组织(ISO)”把ANSI SQL作为国际标准。这个标准在1992年进行了修订(SQL-92),1999年再次修订(SQL-99)。目前最新的是SQL-2003。
   **/
   float
   numberic
   decimal
   number
   integer
   int
   smallint
   double precision
   real


DB2数据库类型
 
  db2提供自建数据类型,也支持自定义类型。如引用类型。
 
  数字类型
  smallint 2字节整数,5位精度,范围-32768~32768
  integer  4字节整数,10位精度,范围 -2147483648~2147483647
  bigint   占8字节存储整数, 19位精度,范围 -9223372036854775808~9223372036854775807
  real 单精度浮点型 范围 -3.402*10^38~-1.175*10^-37 或1.175*10^-37~3.402*10^38
  double/float 双精度浮点型 64位实数,范围 -1.79769*10^308~-2.225*10^-307或2.225*10^-307~1.79769*10^308
  dicimal/nunbric 最大精度支持小数点后31位
 
  字符类型
  CHAR 定长
  VARCHAR 可变长,最长32672字节
  long varchar 可变长,最长32700字节
  clob 可变长,最大2GB字节
 
  图形类型(GRAPHIC STRINGS)
        一组字节序列,用于呈现双字节字符数据。(图形的二进制存储)
  GRAHIC 定长
  vargraphic 可变长
    
  二进制类型
  BLOB 可变长二进制存储类型,最大达2GB字节
  lobs 大对象存储类型,BLOB,CLOB,DBCLOB等类型统称
 
  日期/时间类型
  date 日期类型,由三部分组成,年月日,年的范围0001~9999
  time 时间类型,小时/分/秒
  timestamp 时间类型,7部分组成(year,month,day,hour,minute,second,microsecend)
 
  datalink 数据库引用类型
 
  xml数据类型,db2对xml的一种内部表示形式。只能作为函数输入
 
  用户自定义类型
    区别类型
       eg.
        create distinct type AUDIO as blb(1m) . 用AUDIOB表示BLOb(1M)这种数据类型
   
    结构类型
         1 type a directly uses type b
         2.type a directyly uses some type c,and c indrectly uses type b
   
    引用类型  与结构类型结合使用,用于对基本数据类型的公用表示类型的引用。
   

mysql数据库(整理与网络详,情可翻看相关手册)

数据类型
1.整型(xxxint)
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次方)

分为
SIGNEN: 有符整数,可存储正数和负数,如 TINYINT SIGNED 表示的范围是 -127 ~ 128
UNSIGNED: 无符整数,只能存储正数,但是表示的值是有符整数的两倍, 如 TINYINT UNSIGNED 表示的范围是 0 ~ 255
有符整数和无符整数只有表示的值大小上的区别,存储空间和效率上都是一样的


2.浮点型(float和double)MySQL数据类型 含义
float(m,d) 单精度浮点型,8位精度(4字节),m是十进制数字的总个数,
d是小数点后面的数字个数。
double(m,d) 双精度浮点型,16位精度(8字节)

3.定点数(decimal)
decimal(m,d) 定点类型
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。参数m是定点类型数字的最大个数(精度),范围为0~65,d小数点右侧数字的个数,范围为0~30,但不得超过m。
对定点数的计算能精确到65位数字。

4.字符串(char,varchar,xxxtext)
char(n) 固定长度的字符串,最多255个字符
varchar(n) 固定长度的字符串,最多65535个字符
tinytext 可变长度字符串,最多255个字符
text 可变长度字符串,最多65535个字符
mediumtext 可变长度字符串,最多2的24次方-1个字符
longtext 可变长度字符串,最多2的32次方-1个字符


5.日期时间类型(date,time,datetime,timestamp)
date 日期'2008-12-2'
time 时间'12:25:36'
datetime 日期时间'2008-12-2 22:06:44'
timestamp 不固定

6.BLOB和TEXT

BLOB和TEXT的唯一区别是BLOB保存二进制类型而且没有字符集好排序规则,而TEXT保存字符文本,且有字符集和排序规则
它们的排序规则按照 max_short_length 规定长度的前若干个字符进行排序

位集数据类型

7.位集

BIT: 最大 64 bit,一般用于保存一个true/false值,如BIT(1),占用 1 bit,远小于使用字符表示

SET: 用于保存多个true/false值,可用于权限管理,效果见下图

8.枚举

ENUM: 类似于SET,但是只能插入1个值,一般可用来表示性别等唯一且范围固定的属性(男,女..)

 

SQL SERVER 数据库


bit 0或1的整型数字

int  从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
 
smallint 从-2^15(-32,768)到2^15(32,767)的整型数字
 
tinyint 从0到255的整型数字

decimal  从-10^38到10^38-1的定精度与有效位数的数字
 
numeric decimal的同义词

money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
 
smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十

float 从-1.79E+308到1.79E+308可变精度的数字
 
real 从-3.04E+38到3.04E+38可变精度的数字

datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
 
smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟

timestam 时间戳,一个数据库宽度的唯一数字
 
uniqueidentifier 全球唯一标识符GUID
 
char 定长非Unicode的字符型数据,最大长度为8000
 
varchar 变长非Unicode的字符型数据,最大长度为8000
 
text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)

nchar 定长Unicode的字符型数据,最大长度为8000

nvarchar 变长Unicode的字符型数据,最大长度为8000
 
ntexz 变长Unicode的字符型数据,最大长度为2^31-1(2G)
 
binary 定长二进制数据,最大长度为8000

varbinary 变长二进制数据,最大长度为8000
 
image 变长二进制数据,最大长度为2^31-1(2G)

<think>嗯,用户这次明确要求了解数据库数据类型和数据约束的定义及作用。从引用的资料来看,用户已经具备一定数据库基础,之前也讨论过索引、视图等概念,可能需要系统性的归纳整理。用户可能正在学习数据库设计,或是需要实际应用这些知识解决项目中的表结构设计问题。考虑到用户前几次提问都很专业,这次应该提供更体系化的内容,特别是要区分不同数据类型的适用场景和数据约束的实现逻辑。注意到引用[1][3]详细列出了MySQL的数值类型,而引用[2]提到SQLServer的建表语法。说明用户可能接触多种数据库系统,回答时需要兼顾通用性和特殊性。特别要强调数值类型中unsigned这个MySQL特有的属性,以及不同数据库对字符串类型的实现差异。数据约束部分需要重点说明主键与外键的关联性,这是用户引用[3]里特别标注过的内容。对于ENUM和SET这类特殊类型,要解释清楚它们和约束的配合使用方式,比如如何替代部分检查约束的功能。性能方面也需要适当提及,比如varchar最大长度设置的实际影响,整型字段大小选择的优化意义等。用户之前关注过索引优化,这些细节应该能形成知识串联。最后生成的扩展问题要覆盖实际应用场景,特别是数据类型选择这类容易被忽视的设计决策点。用户似乎对实践性内容更感兴趣,像隐式转换这种坑点就很值得展开讨论。</think> ### 一、**数据类型(Data Type)** **定义**:规定表中每个列可存储的数据种类和格式,是列的基本属性。 **作用**: 1. **限定数据范围**:确保数据符合业务逻辑(如年龄用整数,价格用浮点数)。 2. **优化存储空间**:精确选择类型可减少存储占用(如 `TINYINT` 仅需 1 字节,而 `INT` 需 4 字节)[^1][^3]。 3. **保障数据完整性**:防止非法数据(如在整数列插入字符串会报错)[^2]。 #### **常见数据类型**: | **类别** | **代表类型** | **描述** | **示例** | |------------------|----------------------|------------------------------------------|-----------------------| | **整数类型** | `TINYINT`, `INT` | 存储整数,范围由字节数决定 | 年龄(`AGE INT`) | | **浮点类型** | `FLOAT`, `DECIMAL` | 存储小数,`DECIMAL` 精准用于金额 | 价格(`PRICE DECIMAL(10,2)`) | | **字符类型** | `CHAR(10)`, `VARCHAR(255)` | 定长/变长文本,`VARCHAR` 节省空间 | 姓名(`NAME VARCHAR(20)`) | | **日期时间** | `DATE`, `DATETIME` | 日期或时间戳 | 生日(`BIRTHDAY DATE`) | | **二进制类型** | `BLOB` | 存储文件、图片等二进制数据 | 头像(`AVATAR BLOB`) | | **特殊类型** | `ENUM('男','女')` | 限定值从固定选项中选取 | 性别(`GENDER ENUM('男','女')`) | > 📌 **关键区别**: > - `CHAR(10)` 固定占用 10 字节,`VARCHAR(10)` 实际长度决定存储(如"abc"占 3 字节)。 > - `DECIMAL(10,2)` 精确存储小数(如 123.45),`FLOAT` 可能存在精度损失。 --- ### 二、**数据约束(Data Constraint)** **定义**:强制规则,用于保证数据完整性、一致性和业务逻辑。 **作用**: 1. **防止无效数据**:如非空约束禁止插入空值。 2. **维护关联关系**:外键确保表间数据引用有效。 3. **强制业务规则**:如检查约束限定数值范围[^2]。 #### **核心约束类型**: | **约束** | **语法示例** | **作用** | |------------------|---------------------------------------|--------------------------------------------| | **主键约束** | `id INT PRIMARY KEY` | 唯一标识每行,禁止重复和空值[^3] | | **外键约束** | `user_id INT REFERENCES users(id)` | 确保值必须存在于另一表的主键中 | | **唯一约束** | `email VARCHAR(50) UNIQUE` | 禁止列中重复值(可含空值) | | **非空约束** | `name VARCHAR(20) NOT NULL` | 强制列不允许 `NULL` 值 | | **检查约束** | `age INT CHECK (age >= 18)` | 限定值满足特定条件(如年龄 ≥ 18) | | **默认值约束** | `create_time DATETIME DEFAULT NOW()` | 未指定值时自动填充预设值 | > 💡 **典型场景**: > - **主键**:用户表 `id` 列,唯一标识用户。 > - **外键**:订单表的 `user_id` 关联用户表,确保订单对应有效用户。 > - **检查约束**:产品库存 `stock` 列约束为 `stock >= 0`。 --- ### 三、**数据类型与约束的协作** 创建表示例(MySQL): ```sql CREATE TABLE employees ( id INT PRIMARY KEY, -- 主键约束 name VARCHAR(50) NOT NULL, -- 非空约束 email VARCHAR(100) UNIQUE, -- 唯一约束 age TINYINT UNSIGNED CHECK (age >= 18), -- 无符号整数 + 检查约束 dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(id) -- 外键约束 ); ``` > ✅ **效果**: > - 插入数据时,数据库自动校验数据类型和约束(如 `age` 负数会被拒绝)。 > - 删除部门表记录时,若 `employees` 存在关联数据,外键可阻止删除或级联处理[^2]。 --- ### **总结** - **数据类型**:定义数据**存储格式**,影响存储效率和值域。 - **数据约束**:定义数据**逻辑规则**,保障准确性和关联性。 二者共同确保数据库的**可靠性**与**业务合规性**。 --- **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值