目录

一:MySQL数据类型之整型

1.整型
tinyint		1bytes
smallint 2bytes
int 4bytes
bigint 8bytes

不同类型的int能够存储的数字范围不一样

2.验证不同类型的int是否会空出一个存储正负号
create table t6(id tinyint);
insert into t6 values(256),(-129);
得出结论:tinyint默认就会空出一位存储正负号

"""其实所有的int类型默认都是空出一位存储正负号"""

3.增加约束条件 去除正负号(unsigned)
create table t7(id tinyint unsigned);
insert into t7 values(256),(-129); 结论:正负号可以通过约束条件去除掉

二:浮点型

1.浮点型
float(255,30)
总共255位小数位占30位
double(255,30)
总共255位小数位占30位
decimal(65,30)
总共65位小数占30位
2.验证浮点型精确度
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.1111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);

1.三者精确度不同
精确度最高 : decimal 2.精确度排序
decimal > double > float
具体使用结合实际情况

三:字符类型

1.字符类型
char(4)  	 定长
最多存储四个字符 超出了则报错 没超出则用空格填充 varchar(4) 变长
最多存储四个字符 超出了则报错 没超出有几个存几个
2.验证字符类型是否限制
create table t11(id int,name char(4));
create table t12(id int,name varchar(4));
insert into t11 values(1,'jason');
insert into t12 values(1,'jason');

3.失真原因
出现失真的情况,是因为MySQL配置文件内缺少了SQL_MODE内严格模式代码
简称:
sql_mode : 严格模式(如果一个数据不符合数据规范就拒绝存储)本身系统默认自带
4.SQL_MODE(命令修改)
4.1.模糊查询(过滤)

show variables like '%mode%';

4.2修改修改
set session		: 只在当前操作界面有效
set global : 全局有效
4.3直接修改配置文件
set global sql_mode = 'strict_trans_tables';

4.4修改完成后 重新启动后才生效

exit

mysql -uroot -p

4.5再次查询即成功了

show variables like '%mode%';

四:研究数字在数字类型与字符类型中的区别

1.验证数字在数字类型中是否是用来限制存储长度
create table t13(id int(3));
insert into t13 values(111111);

'''数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度'''

2.验证数字在数字类型中是用来展示长度的
create table t14(id int(8) unsigned zerofill);
insert into t14 values(1111);
insert into t14 values(111111111);

zerofill : 运用0填充验证

unsigned : 去除正负号

3.结论:以后遇到数字类型不要指定数字 让他使用自带的即可

create table t15(id int);

五:char与varchar差异

1.char()与varchar()数字的差异
char(4) : 定长
最多存储4个字符 超出了则报错 没超出则用空格填充 varchar(4) : 变长
最多存储4个字符 超出了则报错 没超出则有几个存储几个
2.验证char定长特性
create table t17(id int,name char(5));
insert into t17 values(1,'tom');

3.统计某个字段数据对应的长度

char_length()

4.上述方法还是无法验证 需要先(取消底层优化操作)

set global sql_mode='strict_trans_tables,pad_char_to_full_length'

5.退出MySQL重启启动后生效

exit

mysql -uroot -p

6.查询已经修改成功

show variables like '%mode%';

5. 再次验证

insert into t17 values(2,'a');

6.查看长度(没超出则用空格填充)

select char_length(name) from t17;

7.验证varchar变长特性
create table t18(id int,name varchar(5));
insert into t18 values(1,'tom');
8.查看长度

select char_length(name) from t18;

六:char与varchar对比(那个比较好)

1.char(全面介绍)
char
优势:整存整取 速度快
劣势:浪费存储空间 char作用:
char在存储时:固定了字符的长度不够的会空格填充。在取得时候固定取存时候的长度即可 char存储格式:
char(6)
jason tony jack kevin
2.varchar(全面介绍)
varchar
优势:节省存储空间
劣势:存取数据的时候都需要先考虑报头 速度较于char慢 varchar作用:
varchar在存储时: 没有固定字符的长度。在每次取得时候会有一个报头,先取报头然后再取真实数据 varchar存储格式:
varchar(6)
1bytes+jason1bytes+tony1bytes+jack1bytes+kevin
3.总结

所以在存储数据长度差异不大得时候使用char,数据长度差异很大情况下使用varchar

MySQL数据类型操作(char与varchar)的更多相关文章

  1. 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本

    解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...

  2. mysql数据类型——字符串char(m)和varchar(m)

    char(m) 定长字符串类型  非 Unicode 字符 varchar(m) 变长字符串类型  非 Unicode 数据 说明:M为最大可存储字节数 汉子占两个字节,通过指定m,来限制存储的最大字 ...

  3. MySQL中的char与varchar详解

    mysql中char与varchar的区别: char:定长,效率高,一般用于固定长度的表单提交数据存储  :例如:身份证号,手机号,电话,密码等 varchar:不定长,效率偏低 1.varchar ...

  4. Mysql中的char与varchar length()与char_length()

    在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同. 在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不 ...

  5. MySQL中有关char、varchar、int、tinyint、decimal

    char.varchar属于字符串类型 1.char属于定长,能确切的知道列值的长度,也就是有多少个字符.当指定char(5)时,表示只能存5个字符,如5个英文‘a’,5个汉字‘我’,5个符号‘&am ...

  6. MySQL中的CHAR和VARCHAR到底支持多长?

    最近在研究MySQL的数据类型,我们知道,选择合适的数据类型和数据长度对MySQL的性能影响是不可忽视的,小字段意味着可以MySQL可以读取更多的记录,从而加快查询速度. 网上该问题的答案有很多版本, ...

  7. MySQL int、char、varchar 最大值是多少?

    1.int(len) (1)max(len) = 255 (2)存储范围: 带符号整数:-2147483648-2147483647. 无符号(unsigned)整数:0-4294967295. 2. ...

  8. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  9. MySQL中char和varchar有啥区别?优缺点是啥?

    在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 c ...

随机推荐

  1. 【LeetCode】974. Subarray Sums Divisible by K 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 前缀和求余 日期 题目地址:https:/ ...

  2. 【LeetCode】114. Flatten Binary Tree to Linked List 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先序遍历 递归 日期 题目地址:https://le ...

  3. Codeforces 567C:Geometric Progression(DP)

    time limit per test : 1 second memory limit per test : 256 megabytes input : standard input output : ...

  4. uniapp使用uni.openDocument打开文件时,安卓打开成功,iOS打开失败【原因:打开的文件的文件名是中文】

    解决办法:使用escape进行文件名编码 uni.downloadFile({ url: url, success: function(res) { var filePath = res.tempFi ...

  5. [opencv]<学习Opencv>英文原版翻译学习

    [注]下文全部内容为 <<Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library>>经由在线翻译整理 ...

  6. JUC之线程间定制化通信

    线程通信之定制化 之前文章中写了下Condition的使用,这里我们详细说下其中的用法: 首先使用Condition需要实例化Lock private Lock lock = new Reentran ...

  7. 编写Java程序,定义士兵类(Soldiers)并初始化5个士兵对象。

    返回本章节 返回作业目录 需求说明: 创建士兵类(Soldiers),定义有一个String类型参数name,代表士兵的姓名,两个int类型变量x和y,分别表示士兵所在的坐标位置,x代表横坐标,y代表 ...

  8. Eclipse控制台Console使用说明

    1.说明 本文详细介绍Eclipse控制台Console使用说明, 调试时通过控制台查看日志, 有时候日志太多会找不到上面的日志, 有时候几个控制台会不受控制的弹出, 那么请参考本文, 通过调整Ecl ...

  9. MATLAB 设置示波器颜色和行列

    设置颜色 设置行列和图例 放大缩小显示

  10. Swoole 中使用 Table 内存表实现进程间共享数据

    背景 在多进程模式下进程之间的内存是相互隔离的,在一个工作进程中的全局变量和超全局变量,在另一个工作进程中是无法读取和操作的. 如果只有一个工作进程,则不存在进程隔离问题,可以使用全局变量和超全局变量 ...