百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

mysql几个细节问题

wptr33 2025-02-15 17:40 18 浏览

求实




我们的工作很大程度上脱离不开mysql这个关系型数据库。我在工作中发现,在项目中大多数问题都出现在数据存储层面上。比如数据缓存方面,比如mysql慢查询方面。


想起之前项目中真实碰到的关于mysql方面的问题。在这里记录整理下。


有次迭代上线,晚上22点开始部署。临近部署前,产品经理又需要临时调整增大一个功能点数据。就这么个调整,部署时候,果然出现异常。最后排查发现,mysql text 类型字段超限了。


软件项目中临近部署还是尽量避免做任何功能调整。按照流程来讲,任何功能调整,研发要处理,测试要回归,整个流程工作量其实不小。


找了一条数据,把数据分析了一下,发现有63201个字符。



mysql的text类型,存储65535个字节数据。而现在的数据是63201个字符。这些字符是不是完全等于65535个字节呢?


我问旁边的同事,说的都模棱两可。看来这个case,要真正解释清楚。


看到末尾“上”这个字,知道字符串里面肯定存在中文。粗略浏览了下整个文本,发现确实由3类字符组成。中文+标点符号+英文大小写字母。标点符号和英文字母每个符合不论在哪种编码格式下,都占用1个字节长度。


通过在线中文统计工具统计,发现文本内容里面包括:1167个中文。



而这1167个中文具体占用多少个字节,需要根据具体的编码格式来计算的。


通过查看表结构,发现text字段编码格式为UTF8编码。而mysql中,中文在UTF8编码下,一个字符占用3个字节。


那么整个字符串的占用字节数据就是:(63201-1167)+ 1167*3 = 65535。


刚好65535字节。这下很详细的解释了上线部署异常问题。


记得还有一个关于int类型的细节问题。


有次面试,问候选人,int(3)和int(20)的区别是什么?


有一类人会说,int(3)和int(20)存储的数字大小不同,3和20各代表存储的数字位数(但其实,int最大存储不到11位数字)。


有一类人会说,两个存储的数字相同。只是显示位数不同。比如int(3),存储数字5的时候,前面会补0,变成005。


对于第二类人,会补充询问,是否真正见过补零的数据。很大概率都会说没见过。


根据mysql手册来看:


int(M),这个M表示显示宽度,最大值为255。


从最大显示宽度来讲,确实存在补零的情况。不过,补零需要对字段做一个特殊声明才能显示出来。即需要用zerofill来声明,如下:



补零后的结果如下:



如果设置M为255的话,它同样也会补零。即使只能存储10位长度的数字,前面依然会补齐很多个0。



绝知此事要躬行。确实要实践。


在践行知识的过程中,我们的经验才能得以很好的积累。

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...