字符编码,存储引擎及MySQL字段类型相关知识点
字符编码,存储引擎及MySQL字段类型相关知识点
一、字符编码
1.在终端输入\s,查看数据库的基本信息(当前用户,版本,编码,端口号)
2.默认的配置文件是my-default.ini
拷贝上述的文件,然后将文件程序命名为my.ini
添加字符编码相关配置:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
配置文件中涉及到了MySQL相关的配置的修改,那么需要重启服务器才可以生效
ps:我们可以利用配置文件偷懒,将用户名和密码写入配置文件中 ,后续登录的时候就不需要进行输入密码了

二、数据库存储引擎
1.查看所有的存储引擎
我们可以理解存储引擎就是针对相同数据采取不同的存取策略
show engines;
ps:MySQL中默认忽略大小写

2.需要掌握 的存储引擎
1.MyISAM
MySQL5.5之前默认的存储引擎
存取速度快,但是功能少,安全性较低
2.InnoDB
MySQL5.5之后的默认存储引擎
支持事物,行锁,外键等操作,速度没有MyISAM快,但是安全性更高
3.Memory
基于内存的存储引擎,仅应用于临时表的数据存取,但是断电立刻丢失
4.BlackHole
任何写入的数据会立刻消失,类似于垃圾站
3.不同存储引擎之间底层文件的区别
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> use db1;
Database changed
mysql> create table t1(id int) engine=innodb;
Query OK, 0 rows affected (0.02 sec)
mysql> create table t2(id int) engine=myisam;
Query OK, 0 rows affected (0.04 sec)
mysql> create table t3(id int) engine=memory;
Query OK, 0 rows affected (0.01 sec)
mysql> create table t4(id int) engine = blackhole;
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t2 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t3 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values(1);
Query OK, 1 row affected (0.00 sec)

1.Innodb
.frm --->> 表结构
.ibd --->> 表数据(表索引)
2.myisam三个文件
.frm ---->> 表结构
.MYD ---->> 表数据
.MYI ---->> 表索引
3.memory一个文件
.frm ---->> 表结构
4.blackhole一个文件
.frm ----->> 表结构
三、创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的(可有可无)
3.约束条件可以写多个,也可以一个,多个用逗号隔开就好了
4.最后一行不能加逗号
四、字段类型之整型
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes

1.验证整型是否自带负号
mysql> create table t5(id tinyint);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t5 values(-129),(256);
Query OK, 2 rows affected, 2 warnings (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> desc t5;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.01 sec)
2.自定义移除符号
# unsigned 约束条件,意思是说不需要负号
mysql> create table t6(id tinyint unsigned);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t6 values(-129),(256);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> select * from t6;
+------+
| id |
+------+
| 0 |
| 255 |
+------+
2 rows in set (0.00 sec)
插入的数据超出了数据类型的范围,不应该让其插入并自动修改,没有意义,数据库应该直接报错
我们可以修改my.ini配置文件就可以完成这样的设想
[mysqld]
sql_mode='strict_trans_tables'
mysql> use db1;
Database changed
mysql> insert into t6 values(-8);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
五、字段类型之浮点型
float,double,decimal三者都可以存储浮点型数据,但是各自的精确度不一致
mysql> create table t7(id float(60,20));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t8(id double(60,20));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t9(id decimal(60,20));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t7 values(1.11111111111111111111);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t8 values(1.11111111111111111111);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t9 values(1.11111111111111111111);
Query OK, 1 row affected (0.04 sec)
mysql> select * from t7;
+------------------------+
| id |
+------------------------+
| 1.11111116409301760000 |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from t8;
+------------------------+
| id |
+------------------------+
| 1.11111111111111120000 |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from t9;
+------------------------+
| id |
+------------------------+
| 1.11111111111111111111 |
+------------------------+
1 row in set (0.00 sec)
# 精确度:float < double < decimal
# 一般情况下,float足够使用了,如果想要追求精确,可以用字符串代替
六、字段类型之字符类型
char:定长
char(4) 最多存储四个字符,超出就报错,不够四个,空格来填
varchar:变长
varchar(4) 最多存储四个字符,超出就报错,不够有几位存几位
mysql> insert into t10 values(1,'jason1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t11 values(1,'jason1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
# 位数超出就报错
char与varchar
char;整存整取,速度快,浪费存储空间
varchar:节省存储空间,存取数据的速度慢于char
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格,然后在读取的时候又会自动将填充的空格移除,如果想取消该机制,需要
sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
mysql> create table t16(id int,name char(4));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t17(id int,name varchar(4));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t16 values(2,'J');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t17 values(1,'tom');
Query OK, 1 row affected (0.01 sec)
mysql> select char_length(name) from t17;
+-------------------+
| char_length(name) |
+-------------------+
| 3 |
+-------------------+
1 row in set (0.00 sec)
七、数字的含义
数字在很多地方都是用来表示限制存储数据的长度
但是在整型中数字却不是用来限制存储长度,而是控制展示的长度
以后写整型无需添加数字
create table t18(id int(3));
insert into t18 values(1),(123),(123456);
create table t19(id int(3) zerofill);
insert into t19 values(1),(123),(123456);
mysql> select * from t19;
+--------+
| id |
+--------+
| 001 |
| 123 |
| 123456 |
+--------+
3 rows in set (0.00 sec)
八、字段类型之枚举与集合
枚举(多选一):
mysql> create table t12(
-> id int,
-> name varchar(32),
-> gender enum('male','female')
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t12 values(1,'jason','male');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t12;
+------+-------+--------+
| id | name | gender |
+------+-------+--------+
| 1 | jason | male |
+------+-------+--------+
1 row in set (0.00 sec)
集合(多选多):
mysql> create table t13(
-> id int,
-> name varchar(13),
-> hobbies set('dance','sing','drew')
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t13 values(1,'jia','dance,sing,drew');
Query OK, 1 row affected (0.04 sec)
mysql> select * from t13;
+------+------+-----------------+
| id | name | hobbies |
+------+------+-----------------+
| 1 | jia | dance,sing,drew |
+------+------+-----------------+
1 row in set (0.00 sec)
九、字段类型之日期类型
datetime ---->> 年月日时分秒
date ---->> 年月日
time ---->> 时分秒
year ---->> 年
mysql> create table t15(
-> id int,
-> name varchar(32),
-> register_time datetime,
-> birthday date,
-> study_time time,
-> work_time year
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t15 values(1,'jia','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t15;
+------+------+---------------------+------------+------------+-----------+
| id | name | register_time | birthday | study_time | work_time |
+------+------+---------------------+------------+------------+-----------+
| 1 | jia | 2000-11-11 11:11:11 | 1998-01-21 | 11:11:11 | 2000 |
+------+------+---------------------+------------+------------+-----------+
1 row in set (0.00 sec)
字符编码,存储引擎及MySQL字段类型相关知识点的更多相关文章
- 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件
字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...
- MySQL字段类型与操作
MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...
- 存储引擎,MySQL中的数据类型及约束
存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 支持事务, ...
- (转)MySQL字段类型详解
MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...
- MySQL 字段类型介绍
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- MySql 字段类型对应 Java 实体类型
前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...
- MySQL技术内幕InnoDB存储引擎(三)——文件相关
构成MySQL数据库和InnoDB存储引擎表的文件类型有: 参数文件:MySQL实例运行时需要的参数就是存储在这里. 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件. socket文件 ...
- powerdesigner12.5 设置表字符集和存储引擎
powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS 然后选 ...
- 使用Merge存储引擎实现MySQL分表
一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表 ...
- 存储引擎:MySQL系列之七
一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...
随机推荐
- 如何解读Linux Kernel OOPS信息
OOPS信息解读 root@firefly:~/mnt/module# insmod oops_module.ko [ 867.140514] Unable to handle kernel NULL ...
- JS逆向实战4--cookie——__jsl_clearance_s 生成
分析 网站返回状态码521,从浏览器抓包来看,浏览器一共对此地址请求了三次(中间是设置cookie的过程): 第一次请求:网站返回的响应状态码为 521,响应返回的为经过 混淆的 JS 代码:但是这些 ...
- C#中winform DataGridView常用修改点
1.修改列名 一般情况下,从数据库里面读取的列名是英文或者拼音,但是,有时候显示需要中文,这样就需要修改列名了. dgv.Columns[0].HeaderCell.Value="编号&qu ...
- 云实例初始化工具cloud-init源码分析
源码分析 代码结构 cloud-init的代码结构如下: cloud-init ├── bash_completion # bash自动补全文件 │ └── cloud-init ├── Chan ...
- 2022春每日一题:Day 10
题目:CF1110E Magic Stones 每次操作 c[i]变成c[i-1]+c[i+1]-c[i],那么显然,c[1]和c[n]是不会改变的,因此只要c[1]和t[1],c[n]和t[n]不相 ...
- cookies和session总结
1.作为基础知识,但是也是容易被我们忽略的知识. 2.从我的一次面试中,面试官问到,session是什么?和cookies有什么关系,当时我以为很简单,便顺口回答到,session是为了解决http无 ...
- Linux 中的内部命令和外部命令
Linux 中的内部命令和外部命令 作者:Grey 原文地址: 博客园:Linux 中的内部命令和外部命令 CSDN:Linux 中的内部命令和外部命令 什么是 bash shell ? bash s ...
- pyinstaller打包TVM/RPC相关脚本及DSO文件
0. 创建anaconda env numpy中MKL/BLAS库占用很大空间.使用如下命令创建新环境,并替换numpy. conda create -n extranumpy python=3.8. ...
- conky配置(附配置项作用解释)
alignment top_right #是否嵌入桌面 background yes #是否绘制窗口边框 draw_borders no #窗口边框 border_width 10 #cpu_avg_ ...
- 求10以内所有偶数和-Java
public class Demo{ //求10以内所有偶数和 public static void main (String[] args){ int sum = 0; for(int i = 0; ...