mysql 中的数据类型
整型
tinyint 默认有符号最大127 ,为非严格模式 tinyint 无符号最大255
smallint 默认有符号,最大32767,smallint 无符号最大65535,为非严格模式
mediumint,默认有符号,最大值8388607, 无符号最大值16777215
int ,默认有符号,最大值2147483647, 无符号最大值4294967295
bigint,默认有符号,最大值9223372036854775807,默认无符号 最大值 18446744073709551615
整型默认是有符号,且为非严格默认
非严格模式--> 如果数据超出范围,会自动取最大值
?
浮点型
float
double
decimal 需要指定位数,(a,b)a代表整数位数最大65位数,b代表小数位数最大30位数
浮点型没有无符号
字符串
char 定长字符串 (如果输超出规定范围,会报错)
varchar 长度可变的字符串 (如果输超出规定范围,不会报错)
text 虽然有长度限制,但是会自动补充后面长度的数据,最大长度为2的32次方
blob
枚举和集合
枚举是提前规定一个范围 你的值只能是其中之一 多选一
集合是提前规定一个范围 你的值可以是其中的多个 多选多
集合在插入数据时 ,多个值之前用逗号隔开 但他们必须包含在同一个字符串内!
日期和时间
year
? date
? time
? year date time 都可以用字符串或数字两种方式输入值
? datetime
? timestamp
? datetime和timestamp 只能使用字符串输入
#1 tinyint
#创建表
#create table t1(nums tinyint);
# 测试tinyint 有无符号/是否为严格模式
mysql> create table t1(nums tinyint);
mysql> insert into t1 values(200);
# tinyint 默认有符号最大127 ,为非严格模式
# 修改为无符号
atler table t1 modify nums tinyint unsigned;
mysql> insert into t1 values(200);
+------+
| nums |
+------+
| 127 |
| 200 |
+------+
#tinyint 无符号最大255
# 2 smallint
# 测试smallint 有无符号
create table t2(nums smallint);
mysql> insert into t2 values(3333333);
# smallint 默认有符号,最大32767
# 修改为无符号
mysql> alter table t2 modify nums smallint unsigned;
+-------+
| nums |
+-------+
| 32767 |
| 65535 |
+-------+
# smallint 无符号最大65535,为非严格模式
# 3 mediumint
# 测试mediumint 有无符号
mysql> create table t3(nums mediumint);
# 默认有符号,最大值8388607
#修改为无符号
mysql> alter table t3 modify nums mediumint unsigned;
+----------+
| nums |
+----------+
| 8388607 |
| 16777215 |
+----------+
# 无符号最大值16777215
# 4 int
# 测试Int有无符号
mysql> create table t4(nums int);
# 默认有符号,最大值2147483647
# 修改为无符号
mysql> alter table t4 modify nums int unsigned;
+------------+
| nums |
+------------+
| 2147483647 |
| 4294967295 |
+------------+
# 无符号最大值4294967295
# 5 bigint
# 测试bigint 有无符号
mysql> insert into t5 values(123454566789012312345);
# 默认有符号,最大值9223372036854775807
# 修改为无符号
mysql> alter table t5 modify nums bigint unsigned;
+----------------------+
| nums |
+----------------------+
| 9223372036854775807 |
| 18446744073709551615 |
+----------------------+
#默认无符号 最大值 18446744073709551615
# 整型默认是有符号,且为非严格默认
# 非严格模式--> 如果数据超出范围,会自动取最大值
# 6 float
mysql> create table t6(id float);
mysql> insert into t6 values(12.1234544);
# float 精确到小数点后4位
# 修改无符号
mysql> alter table t6 modify id float unsigned;
Query OK, 1 row affected (1.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into t6 values(12.1234544);
+---------+
| id |
+---------+
| 12.1235 |
| 12.1235 |
+---------+
2 rows in set (0.00 sec)
mysql> select @@sql_mode;
+------------------------+
| @@sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec) # float没有无符号
# 7 double
mysql> create table t7(nums double);
mysql> insert into t7 values(12.1241566124345124);
# 小数后15位
# 修改为无符号
mysql> alter table t7 modify id double unsigned;
mysql> insert into t7 values(12.1241566124345124);
Query OK, 1 row affected (0.13 sec)
mysql> select * from t7;
+--------------------+
| nums |
+--------------------+
| 12.124156612434513 |
| 12.124156612434513 |
+--------------------+
4 rows in set (0.00 sec) # double么有无符号
# 8 decimal
mysql> create table t8(nums decimal);
mysql> insert into t8 values(12.124156612434512412341236512361235);
mysql> select * from t8;
+------+
| nums |
+------+
| 12 |
+------+
1 row in set (0.00 sec) # 需要制定位数
# 指定位数
mysql> create table t10(nums decimal(6,3));
mysql> insert into t10 values(12.12423);
mysql> select * from t10;
+--------+
| nums |
+--------+
| 12.124 |
+--------+
1 row in set (0.00 sec) # 整数位不能超过6位,小数位不能超过3位
# decimal 需要指定位数,(a,b)a代表整数位数最大65位数,b代表小数位数最大30位数
# 9 char 定长字符串 (如果输超出规定范围,会报错)
mysql> create table t11(b char(10));
mysql> insert into t11 values('qwerqweqwerqwetqetqwet');
Query OK, 1 row affected, 1 warning (0.12 sec) # 不能超过10个字符,
mysql> insert into t11 values('qwerqwe');
Query OK, 1 row affected (0.37 sec)
+---------+
| b |
+---------+
| qwerqwe |
+---------+
#注意:虽然输入没有10个字符串,但是也会占用10个字符长度,如果输超出规定范围,会报错,最大范围255
# 优点: 读取/存储速度快于varchar
# 缺点: 浪费磁盘空间
# 10 varchar 长度可变的字符串 (如果输超出规定范围,不会报错)
mysql> create table t12(b varchar(10));
mysql> insert into t12 values('qwerqweqwerqwetqetqwet');
Query OK, 1 row affected, 1 warning (0.12 sec)
+------------+
| b |
+------------+
| qwerqweqwe |
+------------+
# 只是取到规定范围的数据,不会报错,最大值65535
# 优点:节省空间
# 缺点:速度慢于char类型
# 11 text
mysql> create table t13(b text(10));
mysql> insert into t13 values('qwerqweqwerqwetqetqwet');
+------------------------+
| b |
+------------------------+
| qwerqweqwerqwetqetqwet |
+------------------------+
# text 虽然有长度限制,但是会自动补充后面长度的数据,最大长度为2的32次方
# 12 blob
# 没有编码的大二进制 可以用来存储 多媒体数据 视频 音频等..... 一般不会存这种数据
# 注意: mysql会自动将字符串后面的空格删掉 所以你的数据在存储前应该先把空格处理掉