字符编码与配置文件

在MySQL5.X系列中,显示的字符编码有多种,而MySQL8.X系列,字符编码统一为utf8mb4,这个编码是utf8的优化版本,可以存储表情。

查看MySQL默认字符编码命令

\s

修改配置文件统一字符编码

如果你是MySQL5.X系列的版本,建议统一字符编码,防止出现乱码的情况。

1.在MySQL根目录下新建配置文件my.ini

2.打开并写入以下内容:

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3.保存退出,并重启mysql服务

存储引擎

mysql中有多种存储引擎,存储引擎可以理解为处理数据的不同方式。

查看存储引擎:

show engines;

需要了解的存储引擎

MyISAM:mysql5.1之前版本默认的存储引擎,存取数据的速度快 但是功能很少,且安全性较低。

InnoDB:mysql5.1之后版本默认的存储引擎,有诸多功能,安全性较高,但存取速度没有MyISAM快。

BlackHole:任何写入的数据都会立刻消失(类似于垃圾回收处理站)。

Memory:以内存作为数据存取地,速度快但是断电会立刻丢失。

自定义选择存储引擎

在创建表时,我们可以自定义选择存储引擎。

/*选择MyISAM作为表t1的存储引擎*/
create table t1(id int)engine=myisam;
/*选择InnoDB作为表t2的存储引擎*/
create table t2(id int)engine=innodb;
/*选择BlackHole作为表t3的存储引擎*/
create table t3(id int)engine=blackhole;
/*选择Memory作为表t4的存储引擎*/
create table t4(id int)engine=memory;

补充:

使用MyISAM引擎创建表会有3个文件,使用InnoDB引擎创建表会有2个文件,使用BlackHole引擎和Memory引擎创建表会有1个文件。

创建表的完整语法

创建表完整语法

create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
...
);

说明

  1. 字段名和字段类型是必须的
  2. 数字和约束条件是可选的
  3. 约束条件可以写多个,用空格隔开即可
  4. 最后一行字段结尾不能加逗号,也就是后括号不能和逗号相接。

字段类型

整型

字段类型 大小 范围(有符号) 范围(无符号)
tinyint 1bytes -27~27 0~28
smallint 2bytes -215~215 0~216
int 4bytes -231~231 0~232
bigint 8bytes -263~263 0~264

补充

所有的整型都默认带有正负号,如果不想要正负号,则需要添加约束条件:unsigned。

当你在添加记录时,数据大小超出范围:

  • 如果是在5.6版本不会报错,会自动处理成最大范围。
  • 如果是在5.7及以上版本,则会直接报错。

如果想要让5.6版本在添加超出范围的数据时也报错,需要设置为严格模式,输入以下命令:

set global sql_mode = 'STRICT_TRANS_TABLES';

再重启客户端即可。

但这种方法只是临时修改,如果想要永久的严格模式,在my.ini配置文件中[mysqld]添加下列代码并重启mysql服务即可:

sql_mode = 'STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY'

浮点型

字段类型 大小 含义
float(m,d) 4bytes 单精度,总共m位 小数位占d位
double(m,d) 8bytes 双精度,总共m位 小数位占d位
decimal(m,d) m+2bytes 总共m位 小数位占d位

精确度:decimal > double > float

举例

假设一个字段类型为float(6,3),如果添加数据为123.456789,则会被改成123.456;如果添加数据为123.4,则会被改成123.400;如果添加数据为12.345678,则会被改成12.345;

字符类型

字段类型 大小 含义
char(n) n bytes(n在0~255之间) 定长字符串
varchar(n) n bytes(n在0~65535之间) 变长字符串

定长与变长

char(4):定长,最大只能存储四个字符,超出则报错,不够则空格填充至四个。

varchar(4):变长,最大只能存储四个字符,超出则报错,不够则有几个存几个。

char与varchar优缺点

char:整存整取,速度快,但会造成一定的存储空间浪费。

varchar:节省存储空间,但存取数据的速度没有char快,因为在存取数据时都需要产生或获取一个1bytes的报头,用于记录数据长度。

拓展

获取字段数据长度方法:char_length()

举例:

select char_length(字段) from 表名;

该方法无法直接获取到定长的真实长度,因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格。

让MySQL在取数据的时候不自动移除空命令:

set session sql_mode = 'pad_char_to_full_length'

这个方法只能临时修改,永久修改要添加到my.ini配置文件中。

数字的含义

字段类型括号内的数字大部分情况下是用来限制存储的长度,但是在整型中并不是用来限制长度,而是用来控制展示长度。

如:

/*id字段展示长度为3,不够就用0填充*/
create table t(id int(3) zerofill);
insert into t values(1);
select * from t;

并且整型字段都有一个默认的展示长度。

枚举与集合

类型 含义
enum(值1,值2,...) 枚举,添加数据时只能从定义的值中选取,只能选取一个
set(值1,值2,...) 集合,添加数据时只能从定义的值中选取,可以选取多个或一个

举例:

/*枚举*/
create table t1(
gender enum('male','female','others')
);
insert into t1 value ('male');
insert into t1 value ('abc'); /*严格模式下会报错*/ /*集合*/
create table t2(
hobby set('read','run','music')
);
insert into t2 value ('read,run');
insert into t2 value ('read,gg'); /*严格模式下会报错*/

日期类型

类型 含义
date 存储年月日
datetime 存储年月日时分秒
time 存储时分秒
year 存储年份

约束条件

约束条件是基于字段类型之上的额外限制。

约束条件 作用
unsigned 去掉正负号
zerofill 字段数据长度不够用0填充
not null 让字段数据不能为空
default 设置字段默认值
unique 设置字段数据唯一
primary key 主键,不能为空且唯一
auto_increment 自动增长

not null

让字段数据不能为空

create table t(
id int,
name varchar(55) not null
);
insert into t values (1,2);
insert into t values (1,''); # 不会报错
insert into t(id) values(1); # 此行会报错

default

设置字段默认值

create table t(
id int,
name varchar(55) default 'tom'
);
insert into t(id) values (1);
insert into t values (1,'mike');

unique

设置字段数据唯一。

单列唯一:某个字段下对应的数据唯一

create table t(
id int unique,
name varchar(55)
);
insert into t values (1,'tom');
insert into t values (1,'mike'); # 报错,id:1已存在

多列唯一:多个字段下对应的数据组合到一起的结果唯一

create table t(
id int,
name varchar(55),
unique(id,name)
);
insert into t values (1,'tom');
insert into t values (1,'mike');
insert into t values (2,'tom');
insert into t values (1,'tom'); # 报错,id=1,name='tom'已经存在

primary key

1.单从约束层面上而言,相当于not null + unique(不能为空且唯一)

create table t(
id int primary key,
name varchar(55)
);

2.InnoDB存储引擎规定的一张表有且必须要有一个主键,用于构建表,如果创建表的时候没有设置主键也没有其他的键,那么InnoDB会采用一个隐藏的字段作为表的主键。

3.如果没有主键但是有不能为空且唯一的字段,那么会自动升级成主键(从上往下的第一个),如:

create table t(
tid int,
pid int not null unique,
cid int not null unique
);

上述例子会将pid设为主键

auto_increment

自动增长,专门配合主键一起使用。

create table t(
id int primary key auto_increment,
name varchar(55)
);
insert into t(name) value('tom');
insert into t(name) value('mike');

mysql配置与存储引擎与字段类型与约束条件的更多相关文章

  1. 浅谈MySql的存储引擎(表类型)

    来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...

  2. 浅谈MySql的存储引擎(表类型) (转)

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是 ...

  3. (转)浅谈MySql的存储引擎(表类型)

    原文:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...

  4. MySQL之存储引擎(表类型)的选择

    和大部分的数据库不同,MySQL中有一个存储引擎的概念,用户可以根据数据存储的需求来选择不同的存储引擎.本次博客就来介绍一下MySQL中的存储引擎.MySQL版本 5.7.19. 概述 MySQL的存 ...

  5. MySQL支持多种存储引擎

    MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

  6. MySQL的常见存储引擎介绍与参数设置调优

    MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...

  7. MySQL的常见存储引擎介绍与参数设置调优(转载)

    原文地址:http://www.cnblogs.com/demon89/p/8490229.html MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check ta ...

  8. MySQL 体系结构及存储引擎

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  9. 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...

随机推荐

  1. 原生js造轮子之模仿JQ的slideDown()与slideUp()

    代码如下: const slider = (function() { var Slider = {}; // the constructed function,timeManager,as such ...

  2. 用css动态实现圆环百分比分配——初探css3动画

    最近的小程序项目有个设计图要求做一个圆环,两种颜色分配,分别代表可用金额和冻结金额.要是就直接这么显示,感觉好像挺没水平??于是我决定做个动态! 在mdn把新特性gradients(渐变).trans ...

  3. electron制作聊天界面(仿制qq)

    效果图: 样式使用scss和flex布局 这也是制作IM系统的最后一个界面了!在制作之前参考了qq和千牛 需要注意的点 qq将滚动条美化了 而且在无操作的情况下是不会显示的 滚动条美化 ::-webk ...

  4. 前端存储 - localStorage

    发布自Kindem的博客,欢迎大家转载,但是要注意注明出处 localStorage 介绍 在HTML5中,引入了两个新的前端存储特性: localStorage sessionStorage 这两者 ...

  5. 百度图像识别SDK实验

    软件构造实验作业 实验名称:百度图像识别SDK实验 班级:信1905-1      学号:20194171      姓名:常金悦          一. 实验要求 每个步骤必须截图并说明 二.实验步 ...

  6. PAT B1002写出这个数

    读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...

  7. 微信小程序列表拖动排序Demo

    wxml页面编写 <view class="container"> <view bindtap="box" class="box&q ...

  8. ThingsBoard安装编译搭建环境踩坑记录

    1.首先从github拉下来项目,我们采用源码编译的方式部署 git clone https://github.com/thingsboard/thingsboard.git 2.切换分支 git c ...

  9. 数据库基础知识详解三:MVCC、范式以及表连接方式

    写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正. 8.MVCC 多版本并发控制(Multi-Versi ...

  10. spring boot整合mybaties项目

    1.第一步配置pom.xml 2.第二步 将我们所需要的ssm配置文件复制粘贴到src/main/resources下面: 3.将ssm中所需要的layui和jsp页面放到webapp下面 4.修改复 ...