mysql-数据类型

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会自动将字符串后面的空格删掉 所以你的数据在存储前应该先把空格处理掉  
posted @ 2019-09-02 08:45  raynduan  阅读(383)  评论(0编辑  收藏  举报