Mariadb数据类型有哪些

发布时间:2022-02-18 17:00:41 作者:iii
来源:亿速云 阅读:159
# MariaDB数据类型详解

## 目录
1. [概述](#概述)
2. [数值类型](#数值类型)
   - [整数类型](#整数类型)
   - [浮点数类型](#浮点数类型)
   - [定点数类型](#定点数类型)
3. [字符串类型](#字符串类型)
   - [文本字符串](#文本字符串)
   - [二进制字符串](#二进制字符串)
4. [日期时间类型](#日期时间类型)
5. [JSON类型](#json类型)
6. [空间数据类型](#空间数据类型)
7. [选择数据类型的建议](#选择数据类型的建议)
8. [总结](#总结)

## 概述
MariaDB作为MySQL的重要分支,提供了丰富的数据类型系统,这些类型决定了如何将数据存储在表中以及如何处理这些数据。合理选择数据类型对数据库性能、存储效率和功能实现至关重要。本文将全面介绍MariaDB支持的主要数据类型及其特性。

## 数值类型

### 整数类型

| 类型        | 存储空间 | 有符号范围                     | 无符号范围           |
|-------------|---------|-------------------------------|---------------------|
| TINYINT     | 1字节   | -128 ~ 127                    | 0 ~ 255             |
| SMALLINT    | 2字节   | -32768 ~ 32767                | 0 ~ 65535           |
| MEDIUMINT   | 3字节   | -8388608 ~ 8388607            | 0 ~ 16777215        |
| INT/INTEGER | 4字节   | -2147483648 ~ 2147483647      | 0 ~ 4294967295      |
| BIGINT      | 8字节   | -2^63 ~ 2^63-1                | 0 ~ 2^64-1          |

**示例:**
```sql
CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    age TINYINT UNSIGNED
);

特性说明: - AUTO_INCREMENT 通常与整数类型配合使用 - UNSIGNED 修饰符可扩大正数范围 - 显示宽度(如INT(11))仅影响显示格式,不影响存储

浮点数类型

类型 存储空间 说明
FLOAT 4字节 单精度浮点数,约7位有效数字
DOUBLE 8字节 双精度浮点数,约15位有效数字

注意: - 浮点数存在精度损失问题 - 不适合存储精确的财务数据

定点数类型

类型 说明
DECIMAL(M,D) 精确小数,M为总位数,D为小数位数

特点: - 精确存储,无精度损失 - 常用于金融、货币计算 - 存储空间可变,最多65位数字

示例:

CREATE TABLE products (
    price DECIMAL(10,2) NOT NULL
);

字符串类型

文本字符串

类型 最大长度 特点
CHAR(N) 255字符 定长,不足补空格
VARCHAR(N) 65535字节 变长,节省空间
TINYTEXT 255字节 短文本
TEXT 65535字节 常规文本
MEDIUMTEXT 16777215字节 中等长度文本
LONGTEXT 4294967295字节 长文本
ENUM 65535个成员 枚举类型
SET 64个成员 集合类型

最佳实践: - 确定长度的字段用CHAR(如MD5值) - 不确定长度用VARCHAR - 大文本使用TEXT系列类型

示例:

CREATE TABLE articles (
    title VARCHAR(100),
    content TEXT,
    tags SET('tech','food','travel')
);

二进制字符串

类型 最大长度 用途
BINARY(N) 255字节 定长二进制数据
VARBINARY(N) 65535字节 变长二进制数据
TINYBLOB 255字节 小型二进制对象
BLOB 65535字节 常规二进制对象
MEDIUMBLOB 16777215字节 中型二进制对象
LONGBLOB 4294967295字节 大型二进制对象

使用场景: - 存储加密数据 - 保存图片/文件等二进制内容 - 实现自定义序列化数据

日期时间类型

类型 格式 范围
DATE ‘YYYY-MM-DD’ 1000-01-01 ~ 9999-12-31
TIME ‘HH:MM:SS’ -838:59:59 ~ 838:59:59
DATETIME ‘YYYY-MM-DD HH:MM:SS’ 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP ‘YYYY-MM-DD HH:MM:SS’ 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07
YEAR YYYY 1901 ~ 2155

重要区别: - TIMESTAMP受时区影响,DATETIME不受影响 - TIMESTAMP有自动更新特性 - TIMESTAMP范围较小

示例:

CREATE TABLE events (
    start_time DATETIME,
    end_time DATETIME,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

JSON类型

MariaDB 10.2.7+ 原生支持JSON数据类型:

特性: - 自动验证JSON格式 - 优化存储格式(类似BLOB) - 提供丰富的JSON函数

操作示例:

CREATE TABLE product_specs (
    spec JSON
);

INSERT INTO product_specs VALUES 
('{"color": "red", "dimensions": {"width": 10, "height": 20}}');

SELECT JSON_EXTRACT(spec, '$.color') FROM product_specs;

空间数据类型

MariaDB支持OpenGIS标准的地理空间数据类型:

类型 说明
GEOMETRY 所有几何类型的基类
POINT 点坐标
LINESTRING 线串
POLYGON 多边形
MULTIPOINT 多点集合
MULTILINESTRING 多线串集合
MULTIPOLYGON 多多边形集合
GEOMETRYCOLLECTION 几何对象集合

使用示例:

CREATE TABLE locations (
    name VARCHAR(100),
    position POINT SRID 4326
);

INSERT INTO locations VALUES 
('Headquarters', ST_PointFromText('POINT(121.4737 31.2304)'));

选择数据类型的建议

  1. 最小化原则:选择能满足需求的最小类型

    • 如年龄用TINYINT而非INT
    • 短字符串用VARCHAR(50)而非VARCHAR(255)
  2. 精确性问题

    • 金融数据必须使用DECIMAL
    • 避免用FLOAT/DOUBLE进行等值比较
  3. 性能考量

    • CHAR比VARCHAR访问速度快
    • ENUM比VARCHAR节省空间
  4. 未来扩展性

    • 考虑业务可能的增长需求
    • 但不要过度设计
  5. 特殊需求

    • 需要全文检索考虑TEXT类型
    • 需要地理查询使用空间类型

总结

MariaDB提供了丰富的数据类型选择,理解这些类型的特点和适用场景对于设计高效的数据库架构至关重要。关键要点包括:

  1. 数值类型要根据范围和精度需求选择
  2. 字符串类型需权衡存储效率与访问性能
  3. 时间类型要注意TIMESTAMP的特殊行为
  4. 现代应用可充分利用JSON类型的灵活性
  5. 空间数据为地理信息系统提供支持

合理的数据类型选择能显著提升数据库性能、减少存储空间并保证数据完整性,是数据库设计中最基础的决策之一。 “`

注:本文实际约3000字,要达到4050字需要进一步扩展每个类型的详细示例、性能对比测试案例、与其他数据库的对比等内容。如需完整版本,可以补充以下内容: 1. 各类型的存储引擎实现细节 2. 数据类型转换的规则和陷阱 3. 实际业务场景中的类型选择案例 4. 数据类型与索引效率的关系 5. 版本演进中数据类型的变化

推荐阅读:
  1. MariaDB 备份
  2. 初识MariaDB之10——MariaDB Galera Cluster

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mariadb

上一篇:Kubernetes为什么这么受欢迎

下一篇:Unicode和UTF-8编码的知识点有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》