首页 > 数据库 >【MySQL】第2回 字符编码和字段类型

【MySQL】第2回 字符编码和字段类型

时间:2022-08-15 21:57:51浏览次数:45  
标签:编码 insert into MySQL values 字符 table create id

目录

1. 字符编码与配置文件

1.1 \S

  1. \s 查看数据库基本信息(用户,字符编码)

1.2 my.ini

  1. my-default.ini # windows下MySQL默认的配置文件
  2. 拷贝上述文件并且重命名为my.ini
  3. 添加字符编码相关的配置(百度查看即可)
[mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
[client]
    default-character-set=utf8
[mysql]
    default-character-set=utf8  
  1. 注意如果配置文件涉及到了mysqld相关的配置修改 那么需要重启服务端才可以生效

  2. 偷懒操作 在配置文件中的MySQL下提前写好用户名和密码,之后直接mysql登录

2. 数据库存储引擎

2.1 定义

  1. 我们可以简单的理解为存储引擎就是针对相同的数据采用的不同的存取策略
  2. show engines; 查看所有的存储引擎

2.2 需要掌握的存储引擎

存储引擎 简介
MyISAM MySQL5.5及之前版本默认的存储引擎
存取数据的速度快,但是功能较少,安全性较低
InnoDB MySQL5.5之后版本默认的存储引擎
存取数据的速度没有MyISAM快,但是支持事物,行锁,外键等诸多功能
安全性较高
Memory 基于内存的存储引擎,存取数据极快,但是断电立刻丢失
BlackHole 黑洞,任何写进去的数据都会立刻丢失,类似于垃圾站

2.3 不同存储引擎之间底层文件的区别

windows cmd终端鼠标右键的意思就是粘贴
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;

存储引擎 区别
InnoDB .frm 表结构
.ibd 表结构,表索引(加快数据查询)
MyISAM .frm 表结构
.MYD 表数据
.MYI 表索引(加快数据查询)
Memory .frm 表结构
BlackHole .frm 表结构

insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);


3. 创建表的完整语法

create table 表名(
       字段名1 字段类型(数字) 约束条件,
       字段名2 字段类型(数字) 约束条件,
       字段名3 字段类型(数字) 约束条件
)engine=存储引擎;
  1. 字段名和字段类型是必须的(至少写一个)
  2. 数字跟约束条件是可选的(可有可无)
  3. 约束条件可以写多个,空格隔开即可
  4. 最后一个字段的结尾千万不能加逗号

4. MySQL字段类型

4.1 字段数据之整型

4.1.1 验证整形是否自带负号

create table t6(id tinyint);
insert into t6 values(-129),(256);


  1. 发现自动填写为两个边界值,数据是失真,没有实际意义
  2. 上述所有的整型类型默认都会带有负号

4.1.2 自定义移除负号

unsigned 约束条件之一,意思是不需要负号
create table t7(id tinyint unsigned);
insert into t7 values(129),(256);

4.1.3 配置文件修改问题

  1. 插入的数据超出了数据类型的范围,不应该让其插入并自动修改,没有意义,数据库应该直接报错(这个特性其实是有的,只是被我们改了>>>:配置文件)

4.1.4 方式一:命令临时修改

set session sql_mode='strict_trans_table' 当前客户端操作界面有效
set global sql_mode='STRICT_TRANS_TABLES'  服务端不重启永久有效

4.1.5 方式二:配置文件永久修改

[mysqld]
	sql_mode='STRICT_TRANS_TABLES'


4.2 字符类型之整型

  1. float, double, decimal 三者都可以存储浮点型数据,但是各自的精准度不一致
  2. 使用方式
# 第一给数表示总共多少位,第二给数表示小数占多少位
float(255,30)
double(255,30)
decimal(65.30)
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);
insert into t10
values(1.11111111111111111111);


3. 总结:float < double < decimal
一般情况下float足够使用了,如果想追求非常完美的精确度,可以使用字符串来代替

4.3 字段类型之字符类型

4.3.1 简介

字符类型 表现形式 例子
char 定长 char(4)
最大只能存储四个字符,如果超过范围则直接报错
如果不能超出范围,则用空格填充至四个字符
varchar 变长 varchar(4)
最大只能存储四个字符,如果超过范围则直接报错
如果不超出范围2,则有几位就存几位

4.3.2 区别

create table t11(id int, name char(4));
create table t12(id int, name varchar(4));
desc t11;
desc t12;
  1. 结果验证,超出范围两者都会报错
    注意sql_mode='strict_trans_tables'
  2. 验证定长和变长特性
    char_length() 统计字段数据的长度
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格,
然后在读取的时候又会自动将填充的空格移除,如果想取消该机制,
需要 sql_mode set global sql_mode='strict_trans_tables,pad_char_to_full_length';
上述目录是替换,不是新增,所有之前的配置也要写上


4.3.3 char VS varchar

  1. 两者使用频率都很高 现在默认很多时候是varchar
类型 优缺点 案例
char 整存整取 速度快
浪费存储空间
char(4)
a bcd aaaaaa 四个一组,空格也算
varchar 节省存储空间
存取数据的速度慢于char
varchar(4)
1bytes+a1bytes+son1bytes+jack
存取数据都需要操作报头(耗时)

4.4 数字的含义

4.4.1 定义

  1. 数字大部分情况下都是用来限制字段的存储长度,但是整型除外,不是用来限制存储的长度,而是展示的长度

4.4.2 理解

create table t13(id int(3));
insert into t13 values(1),(123),(12345);
create table t14(id int(3) zerofill);
insert into t14 values(1),(12);

4.4.3 总结

  1. 以后涉及到整型字段的定义,类型后面不需要加括号写数字,除非有业务需要必须固定位数。 eg:001 012

4.5 字段类型之枚举与集合

4.5.1 枚举(多选一)

# eg:性别(男,女,其他)
create table t15(
     id int,
     name varchar(32),
     gender enum('male','female','others')
);
insert into t15 values(1,'aaaaa','男');
insert into t15 values(1,'bbbb','male')


4.5.2 集合(多选多)

# eg:爱好(写,跑,听)
create table t16(
    id, int,
    name varchar(32),
    hobbies set('read','run','music')
)


4.6 字段类型之日期类型

date 年月日
datetime 年月日时分秒
time 时分秒
year 年份
create table t17(
    id int,
    name varcher(32),
    brith date,
    reg_time datetime,
    study_time time,
    join_time year
);
 insert into t17 values(1,'jason','2022-8-15 ','2022-8-15 11:11:11','11:11:11','2022');

5. MySQL字段约束

5.1 新增

insert into 表名 vlaues()  # 默认按照创建表字段顺序添加
insert into 表名(字段) vlaues  # 可以自定义字段顺序

5.2 unsigent 无负号 id int unsigned

5.3 zerofill 零填充 id int zerofill

5.4 not null 非空

create table t19(id int,name varchar(32) not null);
insert into t19(id) values(1);
insert into t19(id,name) values(1,'');

5.5 default 默认值

create table t20(id int,name varchar(32) not null default 'jason');
insert into t20(id) values(1);
insert into t20(id,name) values(2,'zhang');

5.6 unique 唯一值

  1. id int unique 单列唯一
create table t21(id int unique,name varchar(32));
insert into t21 values(1,'jason');
insert into t21 values(1,'zhang');
insert into t21 values(2,'zhang');


2. unique(host,port) 联合唯一

create table t22(id int,host varchar(32),post int,unique(host,post));
insert into t20 values(1,'127.0.0.1',8080);
insert into t22 values(2,'127.0.0.1',8088);
insert into t22 values(3,'127.0.0.2',8088);
insert into t22 values(4,'127.0.0.1',8080);

标签:编码,insert,into,MySQL,values,字符,table,create,id
From: https://www.cnblogs.com/cainiaozhy/p/16589772.html

相关文章

  • 2022-8-15MySQL的学习
    MySQL数据库数据库数据库【按照数据结构来组织来存储和管理数据的仓库】。是一个长期存储在计算机内的有组织的可共享的,统一管理的大量数据的集合。数据对于公司来......
  • Mysql 数据备份与恢复
    数据备份使用工具导出工具导出文件包含创建数据库和其他sql语句导出内容dbname.sql/*SQLyogUltimatev12.08(32bit)MySQL-5.7.27:Database-dbname******......
  • go 通过sql操作mysql
    GoLang学习更方便,一文在手,面试我有GoLang面试|GoLang面试|GoLang面试go通过sql操作mysql亲测、2022/08/1520:53北京朝阳@目录前言go代码sql汇总-增删改查......
  • 字符编码和配置文件、存储引擎、创建表的完整语法、字段类型
    目录字符编码和配置文件一、前提二、添加字符编码相关配置存储引擎一、介绍二、需要掌握的存储引擎1.MyISAM2.InnoDB3.Memory4.BlackHole三、不同存储引擎之间底层文件的区......
  • 【2022-08-15】mysql基础知识(二)
    mysql基础知识(二)字符编码与配置文件windows系统下查看mysql的版本信息:\s由于5.6版本编码不统一,会导致乱码的情况出现,所以统一修改编码格式为>>>:utf8my-defaul......
  • 数据库2/字符编码/配置文件/字段类型/约束条件
    mysql基础2字符编码与配置文件存储引擎创建表的完整语法字段类型之整型字段类型之浮点型字段类型之字符型数字的含义字段类型与枚举集合字段类型之日期类型字段......
  • mysql 免密登录(解决报错ERROR 1045 (28000))
    mysql登录时,ERROR1045(28000):错误解决办法通常出现的报错如下:ERROR1045(28000):Accessdeniedforuser'ODBC'@'localhost'(usingpassword:NO)ERROR1045(2......
  • MySQL2
    目录一、字符编码与配置文件1.配置文件2.添加字符编码相关的配置(百度查看就好)二、存储引擎1.简介2.需掌握的存储引擎3.不同存储引擎之间底层文件的区别3.1.InnoDB3.2.MyISA......
  • python连接mysql与redis(ssh方式)
    python如何连接数据库(SSH方式)性能测试时,有个支付订单的场景,需要用到已生成的订单code,如何获取订单code?一,通过Jmeter连接数据库获取。二,直接mysql导出数据我这里是使用......
  • MySQL的字段语法
    MySQL的存储字符编码与配置文件1.\s#查看数据库基本信息(用户、字符编码)2.my-default.ini#windows下MySQL默认的配置文件拷贝上述文件并重命名为my.ini3.添......