【MySQL】MySQL中常⽤的数据类型float和decimal、char和varcha。。。【MySQL】MySQL中常⽤的数据类型float和decimal、char和varchar、datetime和timestamp、enum和set
  推荐相关⽂章
⽂章⽬录
⼀、数据类型的分类
数值⼤⼩
补充:
在MySQL中,整型可以指定有/⽆符号,默认是有符号的;通过unsigned来说明某个字段是⽆符号的。
bit (M) 在显⽰时,是按照ASII码对应的值显⽰。
float(M,D) M表⽰显⽰的总长度,D表⽰指定的⼩数位数,超出的会直接被舍弃。
decimal和float相⽐,decimal精度更⾼。float的⼩数最⼤位数D=7,⽽decimal的整数最⼤位数M=65,⼩数最⼤位数
D=30,decimal默认M=10,D=0。注意:M>D
⼆、⼩数类型
2.1 float 类型
float(M,D) [unsigned]; M指定显⽰长度,D指定⼩数位数,占⽤4个字节的空间
  注意: MySQL在保存值时会进⾏四舍五⼊ (M>D)
  实例: float(4,2) 表⽰的范围是 -99.99~99.99;float(4,2) unsigned 表⽰的范围是 0~99.99
2.2 decimal 类型
decimal(M,D) [unsigned]; M指定显⽰长度,D指定⼩数位数
  实例: decimal(5,2) 表⽰的范围是 -999.99~999.99;decimal(5,2) unsigned 表⽰的范围是 0~999.99
  补充: float和decimai虽然都是浮点类型,但是表⽰的精度不⼀样。float表⽰的精度⼤约是7位。
     decimal的显⽰长度M最⼤为65位,⼩数位数D最⼤为30位。如果M和D被省略,默认decimal(10,0)。
2.3 /etc/myf
  如果插⼊的数值超出表⽰范围,MySQL会显⽰能够表⽰的最⼤值。
  为了防⽌超出显⽰范围的值插⼊,我们需要在MySQL的配置⽂件中配置⼀下。路径: /etc/myf mysqld就是配置MySQL服务端启动时所需要读到的参数信息,添加sql_mode的校验。
  再来验证⼀下,此时,插⼊超出显⽰范围的值就会直接报错,提⽰所插⼊的值超出范围。
三、字符串类型
3.1 char 类型
char(L); 固定长度字符串,L是可以存储的长度,单位字符,最长255个字符(L个字符长度)
实例:
create database class_info charset=utf8 collate utf8_general_ci;
create table test1(name char(3));
insert into test1 values('jon');
  请问:此次向表中插⼊的数据所占内存为⼏个字节? 9字节
  "长度" :长度不等同于字节数量。
  "固定" :⼀旦长度L确定,需要结合字符集来考录占⽤内存⼤⼩的。“固定” 的本质是已经将内存开辟好了,消耗的内存是⼀样⼤的。  注意:utf8字符集每⼀个字符是使⽤1-3个字节表⽰的。
     utf8mb4字符集每⼀个字符是使⽤1-4个字节表⽰的。
  推荐博⽂:
3.2 varchar 类型
varchar(L); 可变长度字符串,L表⽰字符长度,单位字符,最长12844个字符,最⼤65535个字节
  varchar类型占⽤内存的⼤⼩=字符串真实占⽤内存⼤⼩ + 1~2个字节(表⽰字符串的长度)
  当前字符串占⽤的内存<255的,那么+1个字节;当前字符串占⽤的内存>=255的,那么+2个字节。
实例:
create database class_info charset=utf8 collate utf8_general_ci;
dictionary app下载create table test2(name varchar(2));
insert into test2 values('李明');
  请问:此次向表中插⼊的数据所占内存为⼏个字节? 5字节(2+2+1)
varchar类型最⼤可占⽤65535个字节,那么L最⼤是(65535-[1,2])/3
12844 Array
char和varchar的对⽐
实际存储char(4)varch(4)char所占字节varchar所占字节abcd abcd abcd4$\times$3=124$\times$3+1=13
A A A4$\times$3=121$\times$3+1=4
ABCDE××数据超过指定长度数据超过指定长度
3.3 如何选择固定长度还是变长字符串
如果数据确定长度都⼀样,就使⽤定长(char),⽐如:⾝份证,⼿机号,md5
如果数据长度有变化,就使⽤变长(varchar), ⽐如:名字,地址,但是你要保证最长的能存的进去
定长的磁盘空间⽐较浪费,但是效率⾼
幽门螺杆菌的症状及表现有哪些
变长的磁盘空间⽐较节省,但是效率低
四、时间⽇期类型
4.1 date
date:⽇期"yyyy-mm-dd",占⽤三字节
4.2 datetime
datatime :时间⽇期格式"yyyy-mm-dd hh:mm:ss" 表⽰范围从1000到9999,占⽤⼋字节
4.3 timestamp
timestamp:时间戳,从1970年开始的 yyyy-mm-dd hh:mm:ss格式和datetime完全⼀致,占⽤四字节
实例:
MariaDB [class_info]>create table time(t1 date,t2 datetime,t3 timestamp);
Query OK,0rows affected (0.01 sec)
MariaDB [class_info]>desc time;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field |Type|Null|Key|Default| Extra                      |
+-------+-----------+------+-----+-------------------+-----------------------------+
| t1    |date| YES  ||NULL||
设计网站页面的软件
| t2    |datetime| YES  ||NULL||
| t3    |timestamp|NO||CURRENT_TIMESTAMP|on update CURRENT_TIMESTAMP|
+-------+-----------+------+-----+-------------------+-----------------------------+
3rows in set(0.00 sec)
insert into time values('2021-03-31','2021-03-31 17:17:00','2021-03-31 17:17:00');
Query OK,1row affected (0.01 sec)
MariaDB [class_info]>select*from time;
+------------+---------------------+---------------------+
| t1        | t2                  | t3                  |
+------------+---------------------+---------------------+
|2021-03-31|2021-03-3117:17:00|2021-03-3117:17:00|
+------------+---------------------+---------------------+
1row in set(0.00 sec)
MariaDB [class_info]>insert into time(t1,t2)values('2021-03-31','2021-03-31 17:21:00');
Query OK,1row affected (0.01 sec)
MariaDB [class_info]>select*from time;
+------------+---------------------+---------------------+
| t1        | t2                  | t3                  |
+------------+---------------------+---------------------+
|2021-03-31|2021-03-3117:17:00|2021-03-3117:17:00|
|2021-03-31|2021-03-3117:21:00|2021-03-3117:21:18|
+------------+---------------------+---------------------+
2rows in set(0.00 sec)
补充:
MariaDB [class_info]>show create table time\G
***************************1.row***************************
Table: timefirebug功能怎么用
Create Table: CREATE TABLE`time`(
`t1`date DEFAULT NULL,
`t2`datetime DEFAULT NULL,
`t3`timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)ENGINE=InnoDB DEFAULT CHARSET=utf8
1row in set(0.00 sec)
  在查看time表的t3字段时,有这样DEFAULT CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两个选项。这两个同时存在时表⽰不论是插⼊还是修改都会更新时间戳。
DEFAULT CURRENT_TIMESTAMP 表⽰在第⼀次插⼊数据的时候会更新时间戳
ON UPDATE CURRENT_TIMESTAMP 表⽰在修改数据时会更改时间戳
五、string类型
5.1 enum类型
enum(‘选项1’,‘选项2’,‘选项3’, …); 枚举是“单选”类型,实际只存储了其中⼀个值
5.2 set类型
set(‘选项值1’,‘选项值2’,‘选项值3’, …); 集合是“多选”类型 ,实际存储了其中任意多个值
实例: 如果插⼊的值不在集合中,则插⼊失败。
MariaDB [class_info]>create table string(sex enum('男','⼥'),hobby set('登⼭','越野','推本','篮球'));
Query OK,0rows affected (0.01 sec)
MariaDB [class_info]>show create table string;
+--------+-----------------------------------+
|Table|Create Table|
+--------+-----------------------------------+
| string |CREATE TABLE`string`(
`sex`enum('男','⼥')DEFAULT NULL,
`hobby`set('登⼭','越野','推本','篮球')DEFAULT NULL)
ENGINE=InnoDB DEFAULT CHARSET=utf8          |
+--------+------------------------------------+
1row in set(0.00 sec)
MariaDB [class_info]>insert into string(sex)values('男');
Query OK,1row affected (0.00 sec)
MariaDB [class_info]>insert into string(sex)values('⼥');
Query OK,1row affected (0.00 sec)
MariaDB [class_info]>insert into string(sex)values('中性');
ERROR 1265(01000): Data truncated for column'sex' at row1
MariaDB [class_info]>select*from string;
+------+-------+
手机mysql安装配置教程
| sex  | hobby |
+------+-------+
|男|NULL|
|⼥|NULL|
+------+-------+
2rows in set(0.00 sec)
MariaDB [class_info]>insert into string(hobby)values('推本');
Query OK,1row affected (0.00 sec)
MariaDB [class_info]>insert into string(hobby)values('推本,越野');
Query OK,1row affected (0.00 sec)
MariaDB [class_info]>select*from string;
+------+---------------+
| sex  | hobby        |
+------+---------------+
|男|NULL|
|⼥|NULL|
|NULL|推本|
|NULL|越野,推本|
+------+---------------+
4rows in set(0.00 sec)
模板网站模板建站MariaDB [class_info]>insert into string(hobby)values('游泳');
ERROR 1265(01000): Data truncated for column'hobby' at row1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。