1. 首页 > MySQL教程 > 正文

MySQL教程FG065-MySQL数据类型选择与使用

GF-MySQL

内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。

Part01-基础概念与理论知识

1.1 什么是数据类型

数据类型是指列、变量和表达式可以存储的数据种类。在MySQL中,选择合适的数据类型对于数据库的性能、存储效率和数据完整性都非常重要。 01 更多视频教程www.fgedu.net.cn

1.2 数据类型的重要性

  • 性能优化:合适的数据类型可以提高查询速度和存储效率
  • 数据完整性:正确的数据类型可以防止无效数据的输入
  • 存储空间:选择合适的数据类型可以减少存储空间的使用
  • 查询效率:适当的数据类型可以提高索引效率

Part02-生产环境规划与建议

2.1 数值类型

用于存储数字数据,包括整数、浮点数和定点数。 02 学习交流加群风哥微信: itpux-com

2.1.1 整数类型

数据类型 存储空间 取值范围 描述
TINYINT 1字节 -128 到 127 非常小的整数
SMALLINT 2字节 -32768 到 32767 小整数
MEDIUMINT 3字节 -8388608 到 8388607 中等大小整数
INT 4字节 -2147483648 到 2147483647 标准整数
BIGINT 8字节 -9223372036854775808 到 9223372036854775807 大整数

2.1.2 浮点数类型

数据类型 存储空间 取值范围 描述
FLOAT 4字节 ±1.175494351E-38 到 ±3.402823466E+38 单精度浮点数
DOUBLE 8字节 ±2.2250738585072014E-308 到 ±1.7976931348623157E+308 双精度浮点数

2.1.3 定点数类型

数据类型 存储空间 描述
DECIMAL(M,D) 可变 定点数,M是总位数,D是小数位数

2.2 字符串类型

用于存储文本数据。

2.2.1 定长字符串

数据类型 存储空间 描述
CHAR(M) M字节 定长字符串,M最大为255

2.2.2 变长字符串

数据类型 存储空间 描述
VARCHAR(M) 可变 变长字符串,M最大为65535
TEXT 可变 最大长度为65535字节
MEDIUMTEXT 可变 最大长度为16777215字节
LONGTEXT 可变 最大长度为4294967295字节

2.2.3 二进制字符串

数据类型 存储空间 描述
BINARY(M) M字节 定长二进制字符串
VARBINARY(M) 可变 变长二进制字符串
BLOB 可变 二进制大对象,最大长度为65535字节

2.3 日期时间类型

用于存储日期和时间数据。

数据类型 存储空间 取值范围 描述
DATE 3字节 1000-01-01 到 9999-12-31 日期
TIME 3字节 -838:59:59 到 838:59:59 时间
DATETIME 8字节 1000-01-01 00:00:00 到 9999-12-31 23:59:59 日期时间
TIMESTAMP 4字节 1970-01-01 00:00:01 到 2038-01-19 03:14:07 时间戳
YEAR 1字节 1901 到 2155 年份

2.4 其他类型

2.4.1 枚举类型

数据类型 存储空间 描述
ENUM(‘value1′,’value2’,…) 1或2字节 枚举类型,只能存储预定义的值之一

2.4.2 集合类型

数据类型 存储空间 描述
SET(‘value1′,’value2’,…) 1-8字节 集合类型,可以存储多个预定义的值

2.4.3 JSON类型

数据类型 存储空间 描述
JSON 可变 存储JSON格式数据

Part03-生产环境项目实施方案

3.1 最小化存储空间

  • 选择能够满足需求的最小数据类型
  • 例如:存储年龄使用TINYINT而不是INT
  • 存储小整数使用SMALLINT而不是INT

3.2 考虑数据完整性

  • 选择能够确保数据完整性的数据类型
  • 例如:存储日期使用DATE而不是VARCHAR
  • 存储货币使用DECIMAL而不是FLOAT

3.3 考虑查询性能

  • 整数类型的查询性能通常比字符串类型好
  • 定长类型(如CHAR)的查询性能通常比变长类型(如VARCHAR)好
  • 对于频繁查询的列,选择合适的数据类型可以提高索引效率

3.4 考虑未来扩展性

  • 选择数据类型时要考虑未来数据的增长
  • 例如:存储用户ID时,考虑未来用户数量的增长,选择合适的整数类型

Part04-生产案例与实战讲解

4.1 数值类型使用场景

示例:

-- 存储年龄(0-120)
age TINYINT UNSIGNED

-- 存储用户ID(预计不超过1000万)
user_id INT AUTO_INCREMENT PRIMARY KEY

-- 存储大整数(如订单号)
order_id BIGINT

-- 存储价格(精确到分)
price DECIMAL(10,2)

-- 存储科学计算数据
measurement FLOAT
            

4.2 字符串类型使用场景

示例:

-- 存储用户名(固定长度)
username VARCHAR(50)

-- 存储密码哈希值(固定长度)
password CHAR(64) -- 假设使用SHA-256哈希

-- 存储文章内容
content TEXT

-- 存储图片或文件
file BLOB
            

4.3 日期时间类型使用场景

示例: 03 学习交流加群风哥QQ113257174

-- 存储出生日期
birth_date DATE

-- 存储会议时间
meeting_time TIME

-- 存储订单创建时间
created_at DATETIME

-- 存储最后更新时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

-- 存储年份
year_published YEAR
            

4.4 其他类型使用场景

示例:

-- 存储用户状态
status ENUM('active', 'inactive', 'deleted')

-- 存储用户兴趣
interests SET('sports', 'music', 'reading', 'travel')

-- 存储配置信息
config JSON
            

Part05-风哥经验总结与分享

5.1 隐式转换

MySQL会在某些情况下自动进行数据类型转换。

示例:

-- 字符串转换为数字
SELECT '123' + 1; -- 结果为124

-- 数字转换为字符串
SELECT 123 + '456'; -- 结果为579

-- 日期转换为字符串
SELECT DATE('2026-04-01'); -- 结果为'2026-04-01'
            

5.2 显式转换

使用CAST()或CONVERT()函数进行显式数据类型转换。

示例: 04 风哥提示:

-- 转换为字符串
SELECT CAST(123 AS CHAR);
SELECT CONVERT(123, CHAR);

-- 转换为数字
SELECT CAST('123' AS INT);
SELECT CONVERT('123', INT);

-- 转换为日期
SELECT CAST('2026-04-01' AS DATE);
SELECT CONVERT('2026-04-01', DATE);
            

6. 数据类型最佳实践

6.1 数值类型最佳实践

  • 使用UNSIGNED存储非负数值
  • 对于货币数据,使用DECIMAL而不是FLOAT或DOUBLE
  • 选择合适的整数类型,避免使用过大的类型

6.2 字符串类型最佳实践

  • 对于短字符串,使用VARCHAR而不是TEXT
  • 对于固定长度的字符串,使用CHAR
  • 避免使用过长的VARCHAR,根据实际需求设置合适的长度

6.3 日期时间类型最佳实践

  • 对于需要自动更新的时间戳,使用TIMESTAMP
  • 对于范围较大的日期,使用DATETIME
  • 避免使用字符串存储日期时间

6.4 其他类型最佳实践

  • 对于有限的预定义值,使用ENUM
  • 对于多个可选值,使用SET
  • 对于半结构化数据,使用JSON

7. 常见错误与解决方案

7.1 数据类型选择过大

问题:使用了过大的数据类型,浪费存储空间

解决方案:根据实际需求选择合适的数据类型

7.2 浮点数精度问题

问题:使用FLOAT或DOUBLE存储货币数据,导致精度丢失

解决方案:使用DECIMAL存储货币数据

7.3 日期时间存储错误

问题:使用字符串存储日期时间,导致查询困难

解决方案:使用专门的日期时间类型

7.4 索引效率问题

问题:对TEXT或BLOB类型创建索引,影响性能

解决方案:避免对大字段创建索引,或只对前缀创建索引 05更多学习教程公众号风哥教程itpux_com

8. 示例:表结构设计

示例:用户表设计

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 用户ID
    username VARCHAR(50) NOT NULL UNIQUE, -- 用户名
    email VARCHAR(100) NOT NULL UNIQUE, -- 电子邮件
    password CHAR(64) NOT NULL, -- 密码哈希
    first_name VARCHAR(50), -- 名
    last_name VARCHAR(50), -- 姓
    age TINYINT UNSIGNED, -- 年龄
    gender ENUM('male', 'female', 'other'), -- 性别
    status ENUM('active', 'inactive', 'deleted') DEFAULT 'active', -- 状态
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
            

示例:产品表设计

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 产品ID
    name VARCHAR(100) NOT NULL, -- 产品名称
    description TEXT, -- 产品描述
    price DECIMAL(10,2) NOT NULL, -- 价格
    stock INT UNSIGNED NOT NULL, -- 库存
    category_id INT, -- 分类ID
    status ENUM('active', 'inactive', 'deleted') DEFAULT 'active', -- 状态
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
            

9. 总结

本教程介绍了MySQL数据类型的选择与使用,包括: 06 from mysql视频:www.itpux.com

  • MySQL支持的各种数据类型
  • 数据类型的分类和特性
  • 数据类型选择的原则
  • 常见数据类型的使用场景
  • 数据类型转换
  • 数据类型的最佳实践
  • 常见错误与解决方案

选择合适的数据类型是数据库设计的重要组成部分。通过正确选择数据类型,可以提高数据库的性能、减少存储空间的使用、确保数据的完整性,并为未来的扩展做好准备。在实际项目中,应根据具体的业务需求和数据特点,选择最适合的数据类型。

提示:在设计表结构时,应仔细考虑每个字段的数据类型,确保选择的类型能够满足当前需求,同时也能适应未来的变化。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息