Mysql 测试数据类型

本文介绍了MySQL中各种数据类型的测试,包括整型、浮点型、字符型、文本型、枚举类型、集合类型、日期时间等。通过创建表、插入记录和查询来展示数据类型的使用和特点。例如,测试了FLOAT、DOUBLE、DECIMAL的精度,CHAR、VARCHAR的存储,ENUM的枚举值,SET的集合元素,以及DATE、TIME、YEAR等日期时间类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建表

CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY| UNIQUE [KEY][AUTO_INCREMENT]
)ENGINE=INNODB CHARSET=UTF8 AUTO_INCREMENT=100;

  • 首先测试整形数据类型
    创建测试表test1
CREATE TABLE test1(
num1 TINYINT,
num2 SMALLINT,
num3 MEDIUMINT,
num4 INT,
num5 BIGINT
);

– 向表中插入记录INSERT table_name VALUE|VALUES(值,…);

INSERT test1 VALUES(-128,-32768,-8388608,-2147483648,-9223372036854775808);

INSERT test1 VALUES(-129,-32768,-8388608,-2147483648,-9223372036854775808);

– 查询表中所有记录SELECT * FROM tbl_name;

mysql> select * from test1;
+------+--------+----------+-----------+----------------+
| num1 | num2   | num3     | num4      | num5           |
+------+--------+----------+-----------+----------------+
| -128 | -32768 | -8388606 | -21478312 | -3213124234235 |
+------+--------+----------+-----------+----------------+
1 row in set (0.00 sec)

mysql> INSERT test1 VALUES(-129,-32768,-8388608,-2147483648,-9223372036854775808);
Query OK, 1 row affected, 1 warning (0.00 sec)
#当超过设置的整型类型的存储范围,会得到一个warning,并且只能显示对应数据类型范围的数据。
mysql> select * from test1;
+------+--------+----------+-------------+----------------------+
| num1 | num2   | num3     | num4        | num5                 |
+------+--------+----------+-------------+----------------------+
| -128 | -32768 | -8388606 |   -21478312 |       -3213124234235 |
| -128 | -32768 | -8388608 | -2147483648 | -9223372036854775808 |
+------+--------+----------+-------------+----------------------+
2 rows in set (0.00 sec)

使用一下命令查看相关数据类型的范围以及介绍:

mysql>? INT
Name: 'INT'
Description:
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647.
The unsigned range is 0 to 4294967295.
  • 无符号UNSIGNED
    首先创建测试数据表
CREATE TABLE test2(
num1 TINYINT UNSIGNED,
num2 TINYINT 
);

插入值:INSERT test2 VALUES(0,12)

mysql> select * from test2;
+------+------+
| num1 | num2 |
+------+------+
|    0 |  -12 |
+------+------+
1 row in set (0.00 sec)

– 零填充ZEROFILL

CREATE TABLE test3(
num1 TINYINT ZEROFILL,
num2 SMALLINT ZEROFILL,
num3 MEDIUMINT ZEROFILL,
num4 INT ZEROFILL,
num5 BIGINT ZEROFILL
);

INSERT test3 VALUES(1,1,1,1,1);
INSERT test3 VALUES(123,1,1,1,1);

mysql> select * from test3;
+------+-------+----------+------------+----------------------+
| num1 | num2  | num3     | num4       | num5                 |
+------+-------+----------+------------+----------------------+
|  001 | 00002 | 00000003 | 0000000004 | 00000000000000000005 |
|  123 | 00001 | 00000001 | 0000000001 | 00000000000000000001 |
+------+-------+----------+------------+----------------------+
2 rows in set (0.00 sec)

– 测试浮点类型

CREATE TABLE test4(
num1 FLOAT(6,2),
num2 DOUBLE(6,2),
num3 DECIMAL(6,2)
#使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储存空间
);
INSERT test4 VALUES(3.1415,3.1415,3.1415);
INSERT test4 VALUES(3.1495,3.1495,3.1495);

mysql> SELECT * FROM test4;
+---------+---------+---------+
| number1 | number2 | number3 |
+---------+---------+---------+
|    3.15 |    3.15 |    3.15 |
|    3.14 |    3.14 |    3.14 |
+---------+---------+---------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM test4 WHERE number3=3.15;
+---------+---------+---------+
| number1 | number2 | number3 |
+---------+---------+---------+
|    3.15 |    3.15 |    3.15 |
+---------+---------+---------+
1 row in set (0.00 sec)

– 测试CHAR和VARCHAR
#创建表
CREATE TABLE IF NOT EXISTS test5(
str1 CHAR(5),
str2 VARCHAR(5)
);
#插入值
INSERT test5 VALUES(‘1’,’1’);
INSERT test5 VALUES(‘12345’,’12345’);
INSERT test5 VALUES(‘123456’,’123456’);
INSERT test5 VALUES(”,”);
INSERT test5 VALUES(‘1 ‘,’1 ‘);
INSERT test5 VALUES(’ a’,’ a’);
#使用这个 : select concat(‘-‘,str1),concat(‘-‘,str2) from test5;

mysql> select concat('-',str1),concat('-',str2) from test5;
+------------------+------------------+
| concat('-',str1) | concat('-',str2) |
+------------------+------------------+
| -1               | -1               |
| -  a             | -  a             |
+------------------+------------------+
2 rows in set (0.00 sec)
#当空格再前面的时候char和varchar都会预留空格
mysql> select concat(str1,'-'),concat(str2,'-') from test5;
+------------------+------------------+
| concat(str1,'-') | concat(str2,'-') |
+------------------+------------------+
| 1-               | 1  -             |
|   a-             |   a-             |
+------------------+------------------+
2 rows in set (0.00 sec)
#当空格再后面的时候,varcahr会保留空格,但是char是不会保留空格的

——插入文本

INSERT test5 VALUES(‘啊啊啊啊啊’,’麦子学院好’);
CREATE TABLE test6(
str1 TEXT
);

INSERT test6 VALUES(‘skdfjlksdfjlksjdflkj塑料口袋精灵是看见对方离开首都基辅绿卡时间的联发科技’);

– 测试枚举类型
mysql中的枚举类型ENUM是一个字符串对象,它的值是自表创建时在列规定中显式枚举的一列值。在某些情况下,ENUM值也可以为空字符串(”)或NULL:如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且 默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。
CREATE TABLE IF NOT EXISTS test7(
sex ENUM(‘男’,’女’,’保密 ‘)
);
INSERT test7 VALUES(‘男 ‘);
INSERT test7 VALUES(‘女 ‘);
#当创建表时,ENUM成员值的尾部空格将自动被删除。
INSERT test7 VALUES(‘保密’);
INSERT test7 VALUES(‘保密1’);
Query OK, 1 row affected, 1 warning (0.00 sec)
#枚举类型是从1开始
INSERT test7 VALUES(2);
INSERT test7 VALUES(0);
Query OK, 1 row affected, 1 warning (0.00 sec)
INSERT test7 VALUES(NULL);
INSERT test7 VALUES(”);

– 测试集合类型
l 优点
1) 数据库的数据存储容量相应缩小,利于减少数据操纵的逻辑IO和物理IO;
2) 集合类型的数据读取方便,可根据字符串值,也可以根据字符串集合的顺序编号;
3) 集合类型字段的定义属性维护与其他数据类型类似,并不特殊化;
4) 开发工程师,不需要借助额外的集合元素编码表或程序中使用编号替代集合的字符串元素,达到减少开发成本、提高代码的可读性和可维护性;
l 缺点
1) 集合类型字段的集合元素限制最大为64个;
2) 集合类型字段的定义属性的集合元素,删除导致锁表而影响数据服务提供;
3) 集合类型字段的定义属性的集合元素增加,只能以尾部追加的方式,若是此特性没有掌握,则会导致数据服务提供受影响;

CREATE TABLE IF NOT EXISTS test8(
fav SET(‘A’,’B’,’C’,’D’)
);
INSERT test8 VALUES(‘A,C,D’);
INSERT test8 VALUES(‘D,B,A’);
INSERT test8 VALUES(3);
INSERT test8 VALUES(15);

mysql> select * from test8;
+---------+
| fav     |
+---------+
| A,C,D   |
| A,B,D   |
| A,B     |
| A,B,C,D |
+---------+
4 rows in set (0.00 sec)

– 测试日期时间
MySQL 日期类型:日期格式、所占存储空间、日期范围 比较。

存储空间日期格式日期范围
datetime8 bytesYYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp4 bytesYYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date3 bytesYYYY-MM-DD 1000-01-01 ~ 9999-12-31
year1 bytesYYYY 1901 ~ 2155

在 MySQL 中创建表时,对照上面的表格,很容易就能选择到合适自己的数据类型。不过到底是选择 datetime 还是 timestamp,可能会有点犯难。这两个日期时间类型各有优点:datetime 的日期范围比较大;timestamp 所占存储空间比较小,只是 datetime 的一半。另外,timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。
CREATE TABLE IF NOT EXISTS test9(
birth YEAR
);
INSERT test9 VALUES(1901);
INSERT test9 VALUES(2155);
INSERT test9 VALUES(2156);

CREATE TABLE IF NOT EXISTS test10(
test TIME
);
INSERT test10 VALUES(‘1 12:12:12’);
INSERT test10 VALUES(‘11:11’);

mysql> select * from test10;
+----------+
| test     |
+----------+
| 36:12:12 |
| 12:12:00 |
| 00:00:12 |
+----------+

CREATE TABLE IF NOT EXISTS test11(
test DATE
);
INSERT test11 VALUES(‘12-6-7’);

mysql> select * from test11;
+------------+
| test       |
+------------+
| 2012-06-07 |
| 2012-06-07 |
+------------+
2 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值