在本文中,我将讨论MySQL中的数据类型及其示例。作为开发人员,理解MySQL数据类型非常重要。
什么是MySQL中的数据类型?
理解MySQL中的数据类型是数据库开发中最重要的因素。通过理解数据类型,我们可以创建更专业、规范化、关系化且易于管理的数据库列和表结构。表中的每一列都根据其将要存储的数据值定义其数据类型。换句话说,数据类型定义了列可以存储的值的种类。主要有三种数据类型:
数值数据类型
字符数据类型
时间数据类型
数值数据类型
数值数据类型仅存储数值。根据值的不同,数值数据类型可以是整数数值、定点数和浮点数。数值数据示例包括价格、评分、工资等。
整数数值数据类型
整数数值是像1、2、3、4、5、6等的整数。整数可以存储正数、负数和零。在SQL标准中,整数类型是INTEGER或INT和SMALLINT。在MySQL中,作为对标准整数类型的扩展,它支持TINYINT、MEDIUMINT和BIGINT等整数类型。以下表格显示了整数数值数据类型、其存储大小以及可以存储的最小和最大值。
数据类型 | 存储大小 | 最小值(有符号) | 最大值(有符号) | 最小值(无符号) | 最大值(无符号) |
---|---|---|---|---|---|
TINYINT | 1字节 | -128 | 127 | 0 | 255 |
SMALLINT | 2字节 | -32768 | 32767 | 0 | 65535 |
MEDIUMINT | 3字节 | -8388608 | 8388607 | 0 | 16777215 |
INT | 4字节 | -2147483648 | 2147483647 | 0 | 4294967295 |
BIGINT | 8字节 | -9223372036854775808 | 9223372036854775807 | 0 | 18446744073709551615 |
定点数数据类型
定点数或精确值是像0.01、10.25、123.456等的数值。定点数是带有小数点的货币、小计算和测量数据。定点数可以是正数、负数和零值,每个小数数值有两个部分:小数点右边的位数和数值中的总位数。小数点不计入总位数。例如,值10.25总共有4位,其中两位在小数点右边。
DECIMAL和NUMERIC是存储定点数或精确值的数据类型。DECIMAL和NUMERIC数据类型几乎相同,存储数据值的格式相同。NUMERIC是DECIMAL的同义词。
复制
CREATE TABLE example_fixed_point (
id INT AUTO_INCREMENT PRIMARY KEY,
price DECIMAL(5, 2)
);
INSERT INTO example_fixed_point (price) VALUES (99.99), (10.25), (0.45);
复制
浮点数数据类型复制
浮点数或近似值是非常大或非常小的值,最常用于科学或测量计算。由于计算机硬件架构导致的舍入错误,浮点数也称为近似值。
FLOAT、REAL和DOUBLE PRECISION数据类型用于存储浮点数值。
CREATE TABLE example_floating_point (
id INT AUTO_INCREMENT PRIMARY KEY,
measurement FLOAT(7, 4)
);
INSERT INTO example_floating_point (measurement) VALUES (123.0001), (999.9999), (0.0001);
复制
字符数据类型
字符数据类型可以存储字母、符号和数字。字符数据示例包括名称、描述、字母数字字符串等。
CHAR和VARCHAR数据类型
CHAR或CHARACTER数据类型存储固定宽度的字符列。定义CHAR数据类型时,需要输入列宽。例如:CHAR(5)、CHAR(50)。
复制
CREATE TABLE example_char (
id INT AUTO_INCREMENT PRIMARY KEY,
firstname CHAR(20)
);
INSERT INTO example_char (firstname) VALUES ('张三'), ('李四'), ('王五');
复制
VARCHAR或VARYING CHARACTER存储动态宽度的字符列。在VARCHAR定义中,定义的宽度是数据列中允许的最大值宽度。复制
复制
CREATE TABLE example_varchar (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(250)
);
INSERT INTO example_varchar (description) VALUES ('这是一个描述。'), ('这是另一个描述。'), ('这是第三个描述。');
复制
复制
NCHAR和NVARCHAR数据类型
在SQL标准中,NCHAR和NVARCHAR表示国家字符和国家变量字符。与CHAR和VARCHAR类似,NCHAR和VARCHAR数据类型存储固定宽度的字符列,但使用更大的字符集。NCHAR和VARCHAR使用Unicode字符集,如UTF-8,用于国际化。
复制
CREATE TABLE example_nchar (
id INT AUTO_INCREMENT PRIMARY KEY,
foreign_name NCHAR(20)
);
INSERT INTO example_nchar (foreign_name) VALUES ('张三'), ('李四'), ('王五');
复制
复制
CLOB和BLOB数据类型
CLOB和BLOB分别表示字符大对象和二进制大对象。CLOB和BLOB数据类型用于存储无法存储在CHAR或VARCHAR中的非常大数据。CLOB用于存储字符数据,而BLOB用于存储二进制数据,如图像、音频和视频。
CREATE TABLE example_blob (
id INT AUTO_INCREMENT PRIMARY KEY,
image BLOB
);
-- 假设我们有一个图像文件 'image.jpg'
-- INSERT INTO example_blob (image) VALUES (LOAD_FILE('C:\\Users\\truei\\Downloads\\image.png'));
'));
复制
复制
ENUM数据类型
ENUM数据类型是一个字符串对象,其值在列创建时从定义的允许值列表中选择。它是一种使用数字索引表示字符串值的紧凑数据存储。
复制
CREATE TABLE example_enum (
id INT AUTO_INCREMENT PRIMARY KEY,
status ENUM('active', 'inactive', 'pending')
);
INSERT INTO example_enum (status) VALUES ('active'), ('inactive'), ('pending');
复制
TEXT, TINYTEXT, MEDIUMTEXT, LONGTEXT数据类型复制
TEXT数据类型用于存储长期文本字符串,可以存储从1字节到4GB的数据。
复制
CREATE TABLE example_text (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT
);
INSERT INTO example_text (content) VALUES ('这是一个长文本。'), ('这是另一个长文本。'), ('这是第三个长文本。');
复制
复制
布尔数据类型
布尔数据类型在MySQL中是内置的,而MySQL使用TINYINT(1)表示布尔值。BOOLEAN或BOOL是TINYINT(1)的同义词。
复制
CREATE TABLE example_boolean (
id INT AUTO_INCREMENT PRIMARY KEY,
is_active BOOLEAN
);
INSERT INTO example_boolean (is_active) VALUES (TRUE), (FALSE), (TRUE);
复制
日期、时间和时间戳(时间值)数据类型复制
时间数据类型包括日期、时间和时间戳(同时具有日期和时间值)。日期值存储标准的365天公历。每个数据库系统都有自己的规则来存储和显示日期值。最流行的日期格式是YYYY-MM-DD,其中4Y表示年份,2M表示月份,2D表示日期。MySQL以‘HH:MM:SS’格式检索和显示时间值。时间值格式可能因数据库系统而异。时间戳数据类型可以同时存储日期和时间组件。
复制
CREATE TABLE example_datetime (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO example_datetime () VALUES (), (), ();
复制
复制