当前位置: 首页 > news >正文

SQL 常用数据类型汇总

SQL 数据类型是数据库表设计的核心,用于定义列的存储格式、取值范围和运算规则。不同数据库(MySQL、SQL Server、PostgreSQL)虽有方言差异,但核心类型分类一致。本文按数值型、字符串型、日期时间型、二进制型、特殊类型五大类梳理常用类型,并说明跨库差异与选型原则。

一、数值类型

用于存储数字,核心关注取值范围精度,分为整数、浮点(近似值)、定点(精确值)三类。

1. 整数类型

存储无小数部分的数字,按字节数划分不同范围,需根据实际数值大小选择。

2. 浮点类型(近似值)

基于二进制存储小数,存在精度丢失,适用于对精度要求不高的场景(如身高、温度)。

3. 定点类型(精确值)

以字符串形式存储小数,无精度丢失,是金额、税率等高精度数值的首选。

二、字符串类型

用于存储文本数据,核心关注长度限制存储效率,分为定长、变长、大文本三类。

1. 定长字符串:CHAR

  • 语法:CHAR(N),N 为字符数(MySQL 中 N 范围 1~255);
  • 特点:无论实际存储多少字符,均占用 N 个字符空间,查询速度快;
  • 适用场景:短且长度固定的字符串(如手机号、身份证号、邮编)。

2. 变长字符串:VARCHAR

  • 语法:VARCHAR(N),N 为字符数;
  • 特点:仅占用实际字符数 + 1~2 字节的存储空间,节省空间;
  • 适用场景:长度不固定的短字符串(如用户名、商品名称、地址)。

跨库差异

  • MySQL:VARCHAR最大长度受行大小(65535 字节)限制;
  • SQL Server:VARCHAR(N)为非 Unicode 字符,NVARCHAR(N)为 Unicode 字符(支持中文);
  • PostgreSQL:VARCHAR(N)无性能损耗,也可直接用VARCHAR(无长度限制)。

3. 大文本类型

用于存储超长文本(如文章内容、商品详情),不同数据库的类型名称差异较大。

4. 特殊字符串类型

  • 枚举类型ENUM(MySQL 特有):存储预定义的枚举值,只能选其一,节省空间。
  • 集合类型SET(MySQL 特有):存储多个预定义值(最多 64 个),可多选。

三、日期时间类型

用于存储日期和时间,核心关注时间范围精度,跨库差异较明显。

关键对比

  • DATETIME:存储绝对时间,不受时区影响,范围大;
  • TIMESTAMP:存储相对时间(从 1970-01-01 开始的秒数),受时区影响,范围小。

四、二进制类型

用于存储二进制数据(如图片、音频、序列化数据),不建议直接存储大文件(推荐存储文件路径)。

五、数据类型选型建议

  1. 最小化原则:选择能容纳数据的最小类型(如状态用TINYINT而非INT),节省空间并提升查询效率。
  2. 金额必用定点数DECIMAL/NUMERIC是唯一选择,避免浮点数精度丢失。
  3. 字符串选型
    • 长度固定:用CHAR(如手机号);
    • 长度可变且短:用VARCHAR(如用户名);
    • 超长文本:用TEXT/VARCHAR(MAX)(如文章)。
  4. 日期时间选型
    • 记录创建 / 修改时间:MySQL 用TIMESTAMP(自动更新),其他数据库用DATETIME2
    • 仅存日期:用DATE,避免冗余。
  5. 二进制数据:尽量存储文件 URL(如云存储地址),而非直接存储二进制数据。
  6. 唯一标识:单库用自增INT/BIGINT,分布式系统用UUID

总结

SQL 数据类型的选择直接影响数据库的存储效率、查询性能和数据完整性。核心原则是匹配数据的实际特征:根据数值范围选数值类型,根据文本长度选字符串类型,根据时间精度选日期时间类型。同时需兼顾不同数据库的方言差异,确保表结构的可移植性。掌握常用类型的特性,是设计高效数据库表结构的基础。

http://www.cnnetsun.cn/news/144384.html

相关文章:

  • 移动端AI模型部署实战:从性能瓶颈到极速推理的完整解决方案
  • Noi浏览器与豆包AI深度整合:一站式智能助手解决方案
  • 还在等官方API?现在就能本地运行AutoGLM-Phone-9B,完整安装流程曝光
  • 1、在 Mac 上运行 Windows:解锁新的计算可能性
  • 7、VMware Fusion:安装与使用指南
  • AJ-Report数据可视化大屏设计终极指南:从入门到精通完整教程
  • HikoGUI:现代C++ GUI框架的5大核心优势
  • 终极指南:face-alignment人脸对齐核心功能解析与实战应用
  • Open-AutoGLM核心技术揭秘(AutoGLM-Phone-9B模型获取与运行详解)
  • 快速上手OpenWebRX:浏览器收听全球无线电的终极指南
  • 收藏!从零到实战:30天AI大模型系统学习指南(小白/程序员专属)
  • Material Files:Android文件管理的终极解决方案
  • 递归与分治算法
  • grex:从测试用例到正则表达式的智能转换引擎
  • TenSunS多云管理终极指南:构建自动化运维完整解决方案
  • Sharik终极指南:简单快速的文件共享解决方案
  • FaceFusion能否实现情绪迁移?快乐、悲伤表情自动切换
  • 5分钟搞定:用YOLOv9打造智能家居行为感知系统
  • GODEL:微软开源的目标导向对话AI终极指南
  • 14、Python文件与进程操作全解析
  • 22、Python 在 Windows 上的线程编程全解析
  • Piper开发调试全攻略:告别繁琐安装,拥抱高效迭代
  • 33、服务性能优化技术全解析
  • Vuls并发处理优化:Goroutine调度与并行扫描技术解析
  • 如何用TensorFlow模型库实现零代码AI应用?
  • 终极指南:用Keil Assistant在VS Code中高效开发ARM项目
  • Qwen2-VL-2B-Instruct:如何用20亿参数重新定义多模态AI边界?
  • 破局之道:软件测试流程创新的五大战略支点
  • FaceFusion在互动电影中的角色切换创新玩法
  • 计算机毕设Java基于Java大学生考研服务系统 基于Java的大学生考研服务平台设计与实现 Java技术驱动的大学生考研服务系统开发