TiDB中的数据类型详解

简介: 【2月更文挑战第29天】TiDB支持多种数据类型:整数(TINYINT到BIGINT)、浮点(FLOAT, DOUBLE)、定点(DECIMAL)、字符串(CHAR, VARCHAR, TEXT)、日期时间(DATE, TIME, DATETIME, TIMESTAMP)、二进制(BINARY, VARBINARY, BLOB)以及枚举和集合(ENUM, SET)。正确选择数据类型对存储、查询和性能至关重要。

TiDB是一个兼容MySQL协议的分布式关系型数据库,因此它支持的数据类型大多与MySQL相似。数据类型是数据库设计的基础,正确选择数据类型对于数据的存储、查询和性能优化至关重要。下面将详细介绍TiDB中常用的数据类型,并结合实例说明其使用场景。

1. 整数类型

整数类型用于存储整数值,包括以下几种:

  • TINYINT:一个非常小的整数。有符号范围是-128到127,无符号范围是0到255。
  • SMALLINT:一个小整数。有符号范围是-32768到32767,无符号范围是0到65535。
  • MEDIUMINT:一个中等大小的整数。有符号范围是-8388608到8388607,无符号范围是0到16777215。
  • INT 或 INTEGER:一个标准的整数。有符号范围是-2147483648到2147483647,无符号范围是0到4294967295。
  • BIGINT:一个大整数。有符号范围是-9223372036854775808到9223372036854775807,无符号范围是0到18446744073709551615。

示例

假设我们需要创建一个用户表,其中用户ID是一个整数值,并且不需要负数,那么我们可以选择无符号的INT类型:

CREATE TABLE users (
    user_id INT UNSIGNED NOT NULL PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

2. 浮点类型

浮点类型用于存储小数值,包括以下几种:

  • FLOAT:单精度浮点数。
  • DOUBLEDOUBLE PRECISION:双精度浮点数。

浮点类型用于需要存储小数的情况,但由于浮点数的精度问题,不建议用于需要精确计算的场景,如金融计算。

示例

假设我们需要存储商品的价格,其中价格可能包含小数部分,我们可以选择FLOAT或DOUBLE类型:

CREATE TABLE products (
    product_id INT UNSIGNED NOT NULL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DOUBLE(10, 2) NOT NULL -- 保留两位小数
);

3. 定点类型

定点类型用于存储固定精度的小数,包括以下几种:

  • DECIMALNUMERIC:存储精确的数值,用于需要高精度计算的场景。

DECIMAL和NUMERIC类型允许指定精度和小数位数,非常适合金融计算等需要精确数值的场景。

示例

在财务系统中,我们需要存储账户余额,要求精确到小数点后四位,可以选择DECIMAL类型:

CREATE TABLE accounts (
    account_id INT UNSIGNED NOT NULL PRIMARY KEY,
    balance DECIMAL(10, 4) NOT NULL -- 总共10位数字,其中4位是小数
);

4. 字符串类型

字符串类型用于存储文本数据,包括以下几种:

  • CHAR:定长字符串,长度固定。如果存储的字符串长度小于定义的长度,会用空格填充。
  • VARCHAR:可变长字符串,只存储实际字符串长度+1(用于记录长度)。
  • TEXT:长文本数据,用于存储大量文本。

示例

在存储用户信息时,用户名可能长度不一,适合使用VARCHAR类型:

CREATE TABLE users (
    user_id INT UNSIGNED NOT NULL PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

5. 日期和时间类型

日期和时间类型用于存储日期、时间或日期时间值,包括以下几种:

  • DATE:日期,格式为'YYYY-MM-DD'。
  • TIME:时间,格式为'HH:MM:SS'。
  • DATETIME:日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。
  • TIMESTAMP:时间戳,与UNIX时间戳相关,用于记录特定瞬间的日期和时间。

示例

在记录订单信息时,我们需要知道订单的下单时间,可以使用DATETIME类型:

CREATE TABLE orders (
    order_id INT UNSIGNED NOT NULL PRIMARY KEY,
    user_id INT UNSIGNED NOT NULL,
    order_date DATETIME**NOT NULL**
);

当需要记录一个事件发生的时间戳时,可以使用TIMESTAMP类型:

CREATE TABLE events (
    event_id INT UNSIGNED NOT NULL PRIMARY KEY,
    event_name VARCHAR(100) NOT NULL,
    event_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

6. 二进制数据类型

TiDB还支持存储二进制数据,这在处理图像、音频、视频等文件时非常有用。

  • BINARY:定长二进制字符串。
  • VARBINARY:可变长二进制字符串。
  • BLOB:二进制大对象,用于存储大量的二进制数据。

示例

假设我们有一个用户头像的功能,每个用户都可以上传自己的头像:

CREATE TABLE user_profiles (
    user_id INT UNSIGNED NOT NULL PRIMARY KEY,
    avatar BLOB NOT NULL
);

7. 枚举与集合类型

TiDB还支持枚举(ENUM)和集合(SET)数据类型,用于在预定义的集合中存储值。

  • ENUM:存储预定义集合中的一个值。
  • SET:存储预定义集合中的一个或多个值。

示例

假设我们有一个记录用户性别的表,性别只有男和女两种可能:

CREATE TABLE users (
    user_id INT UNSIGNED NOT NULL PRIMARY KEY,
    gender ENUM('Male', 'Female') NOT NULL
);

对于记录用户爱好的表,用户可能有多个爱好:

CREATE TABLE user_hobbies (
    user_id INT UNSIGNED NOT NULL PRIMARY KEY,
    hobbies SET('Reading', 'Music', 'Sports', 'Travel') NOT NULL
);

每种数据类型都有其特定的使用场景和限制,在设计数据库时应根据实际需求选择合适的数据类型。同时,为了保持数据的一致性和完整性,还应结合使用约束(如NOT NULL、UNIQUE、DEFAULT等)。

相关文章
|
数据库
TiDB中的数据操作
【2月更文挑战第29天】在TiDB中,数据操作包括插入、更新和删除。注意,操作前备份数据,执行更新和删除时务必使用WHERE子句以防止数据丢失。
|
SQL 关系型数据库 MySQL
TiDB支持的SQL语法概述
【2月更文挑战第28天】本章将对TiDB所支持的SQL语法进行概述,涵盖其主要的语法特性和功能。我们将从基本的SQL语句到更复杂的查询和操作,逐步介绍TiDB的SQL语法,帮助读者更好地理解和使用TiDB进行数据库操作。
1237 0
|
存储 SQL 数据库
在TiDB中创建表
【2月更文挑战第29天】在TiDB中创建表涉及定义字段名、数据类型和约束 。注意规划表结构、选择合适的数据类型和约束,以及谨慎使用索引,以平衡查询速度和写入性能。在实际操作前确保备份数据。
|
消息中间件 SQL 分布式计算
一篇文章搞定数据同步工具SeaTunnel
一篇文章搞定数据同步工具SeaTunnel
10201 1
|
9月前
|
JSON API 数据安全/隐私保护
使用curl命令在服务器上执行HTTP请求
总的来说,curl是一个非常强大的工具,它可以让你在命令行中发送各种类型的HTTP请求。通过学习和实践,你可以掌握这个工具,使你的工作更加高效。
906 30
|
9月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
存储 SQL Prometheus
【TiDB原理与实战详解】1、原理与基础优化~学不会? 不存在的!
TiDB 是一款开源的分布式关系型数据库,具备水平扩展、高可用性和强一致性等特点,适用于高并发、低延迟的大规模数据处理场景。其架构设计灵感源自 Google 的 Spanner 和 F1,并兼容 MySQL。TiDB 集群由 TiDB Server(无状态 SQL 层)、PD(元数据管理模块)和 TiKV Server(分布式存储层)组成,还包含 TiFlash(列存储引擎)以加速分析型查询。TiDB 支持分布式事务和多种事务模式,适用于 OLTP 和 HTAP 场景,如电商平台和金融系统。此外,TiDB 的部署要求包括高性能硬件配置和特定网络设置,以确保系统的稳定性和高效运行。
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
2936 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
关系型数据库 OLAP OLTP
深入剖析 OALP 与 OLTP:概念、区别、技术、场景
本文深入剖析了OLTP(在线事务处理)与OLAP(在线分析处理)的概念、区别、技术及应用场景。OLTP专注于实时业务操作,确保数据一致性和高效性,适用于金融、电商等行业;OLAP则侧重于历史数据分析,支持复杂查询和多维分析,助力企业决策。两者在数据特点、系统设计、用户类型及数据库设计上存在显著差异。合理结合OLTP和OLAP,可提升企业的运营效率和决策水平。
2195 15
|
存储 SQL NoSQL
Doris数据仓库介绍
Doris数据仓库介绍
4584 14