MySQL中数据类型的长度问题解析

MySQL中数据类型的长度问题总结

1):int类型,对吧,经常像保存个时间戳啊、id啊、数量啊、排序啊都会用到
提问:INT(11)是什么意思?最大保存十一位数么?
回答:不是楞个回事,听我给你摆,首先长度,也就是INT(M),M指示最大显示宽度,不是说限制你只能插入规定长度的数据,如果不信你试一下:INT(1),你可以插数字1,也可以插100,1000。那到底是撒子意思耶?MySQL手册上头说的清清楚楚:

M指示最大显示宽度,最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关

好,这下晓得的撒?我们指定的INT(10)、INT(11)是指定显示宽度,不是存储大小或者值的范围,再看一个例子:
INT(3)的情况下 插入数字20,和数字2以及数字200,显示结果为:
020;
002;
200;

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(3))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

说白了就是你设定最大宽度,插入的数据不够大,就从填充0,给你填满,够大就随便你,不得管你。这下就很通透了撒,哈哈~(但是强烈建议合理分配,过大过小都不好)
Tip: 对于int类型的,如果不需要存取负值,最好加上UNSIGNED;对于经常出现在WHERE语句中的字段,考虑加索引,整形尤其适合加索引。


2):VARCHAR和CHAR 类型,先VARCHAR,经常用的比如用户名之类可变长度,那就说用户名吧
提问:你说这个用户名,VARCHAR(20)是撒子意思噢?(当然自己把握,没说必须20),这是规定长度了吧?用没得限制哦?汉字英文都是一样的迈?
回答:对头,就是可变长度,你阔以叫渣渣辉,也阔以叫乌木喂喂威 恩耶吞温威 乌温穆扁 欧萨斯,20个字符以内都阔以

说到是不是中英文都一样20个字符,在MySQL5.0之后:是的,一样。但在低版本中,英文肯定还是20,但中文要diao一点,一个占三个字节,所以存不了20个汉字,最多就6,7个??

然后说CHAR,也就是固定长度了,比如密码,常见的MD5加密,就是CHAR(32)对吧,多了少了都不行。
他们俩的区别就是一个可变长度一个固定长度,长度的区别CHAR是0-255,VARCHAR最大长度不固定(64K?反正一般文本够用),存在像字符集不同会受影响之类的因素,感兴趣可以自己去查查,我……晓得撒(懒)。大文本可以考虑TEXT,都是字符串类型的,最大到4G。
然后想说的是

  1. 如果知道文本的长度,最好直接用定长CHAR。
  2. CHAR>VARCHAR>TEXT。(具体以存储引擎而定)
  3. CHAR和VARCHAR可以有默认值,TEXT不能指定默认值。
  4. 尽可能节约空间使用更短的列,分配真正需要的空间,10和100都能存“你好”,懂得起撒

最后是数值型中的DECIMAL数据类型,看到一段描述:

float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)

double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)

decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

因为在建表时,我价格字段就用的DECIMAL,之前用的float,
提问:为什么不用float?
回答:float,double等非标准类型,在数据库中保存的是近似值,而DECIMAL是以字符串的形式保存数值。打个比方,我存的是整数的时候,他就整数给我处理了,(举一反三??)我存0.00给我实际存个0,我存14.00实际给我存个14,是都可以存浮点数,但是涉及到钱,金额这方面还是给我精准着来。

DECIMAL(M,D)
a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。
b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。

也就是说,M就是总长度,D就是小数点后面的长度。比如:
DECIMAL(5,4)=>总长度不超过5位数字,并且小数点后头必须要4位数字:1.2345
DECIMAL(14,9)=>总长度5位数字,整数5位,小数点后9位:12345.123456789

注意:
超出范围或者长度不够会被截断或补位
example:DECIMAL(9,4)

  1. insert 12.12=>12.1200 因为小数点后未满4位,补0。
  2. insert 12.12345=>12.1235 小数点只留4位,多余的自动四舍五入截断
  3. insert 1234567.12=> 失败,因为小数点未满4位,补0变成1234567.1200,超过了9位。严格模式下报错,非严格模式存成999999.999。
  4. 若插入的值未指定小数部分或者小数部分不足D位则会自动补到D位小数,若插入的值小数部分超过了D为则会发生截断,截取前D位小数。M值得是整数部分加小数部分的总长度,也即插入的数字整数部分不能超过M-D位,否则不能成功插入,会报超出范围的错误。
  5. 可能失误操作,感兴趣请自己尝试验证结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HttpComponents入门解析

1 简介 超文本传输协议(http)是目前互联网上极其普遍的传输协议,它为构建功能丰富,绚丽多彩的网页提供了强大的支持。构建一个网站,通常无需直接操作http协议,目前流行的WEB框架已经透明的将这些底层功能封装的很好了&#xff0c…

HttpClient使用和详解

文章目录一、关于HttpClient二、HttpClient使用步骤详解1、创建一个HttpClient对象A、HttpCLientConnectionManagerB、HttpRoutePlannerC、RequestConfig2、创建一个Request对象3、执行Request请求4、处理response1)关闭和entity相关的content stream2)关…

你还在 Docker 中跑 MySQL?

容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。 目前,容器和 Docker依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以&…

使用mybatis-plus来自定义排序

需求&#xff1a; 先时间升序排序&#xff0c;相同的时间在按状态排序&#xff0c;状态的顺序为1 在线 4 潜伏 2 隐身 3 离开&#xff0c;状态相同在按姓名升序排序对排序好的数据进行分页运用mybatis-plus中QueryWrapper 1.导入依赖 <dependencies><dependency>…

Postman实现接口测试(附项目实战)

文章目录Postman实现接口测试1.Postman介绍和安装2. Postman安装2.1 安装方式2.2 安装步骤3. Postman入门示例Postman基本用法Postman高级用法1. 管理用例2. Postman断言3. 全局变量与环境变量5. Postman关联6. 批量执行测试用例7. 读取外部文件实现参数化Postman测试报告目标项…

Postman 使用教程详解

Postman页面 2、新建一个项目 直接点击左边栏上面的添加目录图标来新增一个根目录&#xff0c;这样就等于新建了一个项目&#xff0c;我们可以把一个项目或一个模块的用例都存放在这个目录之下&#xff0c;并且在根目录之下我们还可以在建立子目录来进行功能用例的细分&#…

聊聊@Autowired注解注入,写接口名字还是实现类的名字

用Autowired注解注入,写接口名字还是实现类的名字 来自某程序员一个问答问题 有一点没明白&#xff0c;为什么注解repository注解的是接口UserDAO的实现类UserDAOImpl&#xff0c;而在UserServiceImpl中使用Autowired注解注入属性private UserDAO userDAO自动装配&#xff0c…

Spring注入接口还是实现类,同一接口有多个实现类,如何注入

1、接口&#xff1a;IUserService public interface IUserService {public void sayHello(); }2、实现类&#xff1a;UserServiceImpl&#xff0c;实现了UserService接口 Service("UserServiceImpl ") public class UserServiceImpl implements IUserService{// 添…

Spring只能注入接口,不能注入实现类

只能注入接口&#xff0c;不能注入实现类。 Controller public class Test {AutowiredprivateRoleDao rdi; }privateRoleDao是个接口 这样注入就没有问题&#xff0c; 而注入 Controller public class Test {AutowiredprivateRoleDaoImpl rdi; }会报错&#xff1a;No qua…

调用Dubbo报错: com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method 问题原因和解决办法

我们在使用Dubbo的过程中&#xff0c;时常会碰到这个异常。而有可能导致这个异常的原因是非常多的&#xff0c;排查起来比较困难。下面把如何排查该问题的思路整理了一下&#xff0c;目前我知道的会导致这个异常的原因分为以下几类&#xff1a; 1.需要进行序列化的POJO类没有进…

Springboot dubbo @Service @Transactional 无法提供服务或者无法提供事务的解决办法

问题场景&#xff1a; 今天在springboot中集成spring事务的时候&#xff0c;遇到了一个大坑。如果&#xff08;springbootdubbo&#xff09;中添加 Service、Transactional 两个注解的时候&#xff0c;就不能进行dubbo服务注册了。 解决历程&#xff1a; 1&#xff0c;先是在…

Dubbo序列化

Dubbo序列化 dubbo作为一个rpc框架支持丰富的序列化方式&#xff0c;本文简单介绍dubbo的序列化。本文结构&#xff1a; 对象序列化是什么意思&#xff1f;dubbo序列化几个问题 对象序列化是什意思&#xff1f; 先来思考两个问题&#xff1a; 普通的Java对象的生命周期是仅…

什么是 serialVersionUID ? 序列化对象时必须提供 serialVersionUID 吗?

什么是 serialVersionUID &#xff1f; 序列化对象时必须提供 serialVersionUID 吗&#xff1f; 1&#xff0c;什么是 serialVersionUID &#xff1f; 顾名思义&#xff0c;serialVersionUID是序列化版本号。所有可序列化的类&#xff0c;都有一个静态serialVersionUID属性&a…

【Dubbo学习系列】Dubbo消费端的代理生成详解(@DubboReference和@Reference)

文章目录Spring中Dubbo实现RPC如何加载Reference和DubboReference注解DubboComponentScanRegistrar概括发现Refrence和DubboReference注解&#xff0c;并编织RPC通信逻辑ReferenceAnnotationBeanPostProcessor&#xff08;核心&#xff09;ReferenceDubboReferenceReference和D…

【Java编程】之 List 与数组之间的相互转换Arrays.asList 和 ArrayList 的 subList

文章目录一、数组转换成 List 集合二、List 集合转数组浅谈 Arrays.asList1、不能往 Arrays.asList 生成的 List 集合中添加元素Arrays.asList 只是简单的充当转换接口二、浅谈 ArrayList 的 subList1、subList 索引的取值边界2、subList 不可强转成 ArrayList3、对 subList 的…

谈Java集合类的toArray()的小bug

谈Java集合类的toArray()的小bug toArray()方法 它的作用是将集合转换成数组。但是这个方法有一个弊端&#xff0c;当toArray()方法使用不当时会产生ClassCastException&#xff08;类转换异常&#xff09; public static void main(String[] args) {List<Integer> li…

Dubbo系统里面MultipartFile文件传输问题Dubbo文件上传/传输服务

今天遇到一个问题&#xff0c;在Controller 层里面&#xff0c;直接使用MultipartFile 来接收上传的图片&#xff0c;遇到几个坑。 一、在spring配置文件里面配置文件上传 <!--文件上传--><bean name"multipartResolver"class"org.springframework.web…

Dubbo2.7文档详解

本篇博文参考dubbo官方文档 本编博文参考javaguide之rpc 文章目录一.RPC1.1 什么是 RPC?1.2 为什么要用 RPC?1.3 RPC 能帮助我们做什么呢&#xff1f;1.4 RPC 的原理是什么?1.5 常见的 RPC 框架总结二.既有 HTTP ,为啥用 RPC 进行服务调用?2.1 RPC只是一种设计而已2.2 HTTP…

12nm 制程、Zen+ 微架构 AMD Ryzen 7 2700X 处理器详细测试 - 电脑领域 HKEPC Hard

12nm 制程、Zen 微架构 AMD Ryzen 7 2700X 处理器详细测试 代号 Pinnacle Ridge、AMD 第二代 Ryzen 处理器正式登场&#xff0c;基于经改良的 Zen 微架构&#xff0c;改善了 Cache 及记忆体延迟表现&#xff0c;更先进的 12nm LP 制程&#xff0c;令核心时脉进一步提升&#…

Java之Serializable接口实现序列化和反序列化实例以及部分序列化的四种方法

首先需要明确的概念: 序列化&#xff1a;将数据结构或对象转换成二进制字节流的过程反序列化&#xff1a;将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程持久化&#xff1a;将数据写入文件中长久保存的过程称之为持久化序列化主要目的&#xff1a;是…