MySQL中varchar类型的字段默认值设置方式

 更新时间:2023年10月18日 14:38:13   作者:Rsun04551  
这篇文章主要介绍了MySQL中varchar类型的字段默认值设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySQL varchar字段默认值设置

最近开始给项目设计数据库,遇到一个可能很多人都会遇到的问题,就是设定某一个字段的默认值的时候,是设定null,“”,还是empty string呢?

我们从mysql本身来看:

1:空值(‘’)是不占用空间的

2:MySQL中的NULL其实是占用空间的。

官方文档说明:

NULL columns require additional space in the row to record whether their values are NULL.

For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

所以 mysql设计表时 建议不要用default NULL

  • string类型的可以default ''或者emptystring
  • int类型的可以default 0

另外一点,从不同的项目开发去分析这个问题:

以前单纯做web网页端,对这个默认值设定问题选用null 还是empty string。

但是后来在另外一个团队开发app的时候,这个null和empty string的问题就尤为突出,因为我是用php做接口开发,如果一旦出现null的数据类型,没有处理直接返回去前端,那么无论是ios还是Android端,如果没有处理好这个空的判断,要么就直接输出null,要么程序直接报错。

所有建议设计数据库的时候默认值尽量少用null。

Mysql Varchar 类型为什么默认设置 255?

Mysql5.6.x

在 Mysql5.6 版本下,单列索引的长度不能超过 767bytes,联合索引的长度不能超过 3072bytes

Mysql5.7.x

在 Mysql5.7 版本下,单列索引的长度不能超过 3072bytes,联合索引的长度不能超过 3072bytes

utf8

上面说到单列索引长度为 767,在 utf8 编码下,一个字符为 3bytes,那么 255*3=765,刚好为能够建立索引长度的最大值,如果超出了这个值,如果使用的是 navicat 那么 mysql 会自动将这一列的索引变为前缀索引,截取 255

utf8mb4

在 utf8mb4 下,一个字符为 4bytes, 那么 767÷4=191.75,取整为 191,所以在 utf8mb4 编码下,如果你的 varchar 超出 191,如果使用的是 navicat 那么 mysql 会自动将这一列的索引变为前缀索引,截取 191

为什么联合索引长度是 3072

我们知道 InnoDB 一个 page 的默认大小是 16k。由于是 Btree 组织,要求叶子节点上一个 page 至少要包含两条记录(否则就退化链表了)。

所以一个记录最多不能超过 8k。

又由于 InnoDB 的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过 4k (极端情况,pk 和某个二级索引都达到这个限制)。

由于需要预留和辅助空间,扣掉后不能超过 3500,取个 整数 就是 1024*3=3072

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql delete limit 使用方法详解

    mysql delete limit 使用方法详解

    今天研究cms系统的时候发现,delete 语句后面有个limit,一直都是select查询的时候才使用,不懂为什么要用这个,正好就百度一下为大家分享下delete中使用limit方法与有点
    2014-11-11
  • MySQL使用正则表达式去检索指定数据库字段

    MySQL使用正则表达式去检索指定数据库字段

    这篇文章主要介绍了MySQL使用正则表达式去检索指定数据库字段,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • MySQL每日一练项目之校园教务系统

    MySQL每日一练项目之校园教务系统

    这篇文章主要给大家介绍了关于MySQL每日一练项目之校园教务系统的相关资料,教务管理系统是一套高校专用管理系统,主要用于解决信息化办公流程、学生管理、课程管理、教职工管理等相关问题,需要的朋友可以参考下
    2023-09-09
  • MySQL学习之分组查询的用法详解

    MySQL学习之分组查询的用法详解

    这篇文章主要为大家详细介绍一下MySQL中分组查询的使用,文中的示例代码讲解详细,对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-07-07
  • 解决xmapp启动mysql出现Error: MySQL shutdown unexpectedly.问题

    解决xmapp启动mysql出现Error: MySQL shutdown unexpec

    这篇文章主要介绍了解决xmapp启动mysql出现Error: MySQL shutdown unexpectedly.问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • MySQL导出sql脚本文件操作指南

    MySQL导出sql脚本文件操作指南

    mysql数据库是非常常用的一种数据库,属于中小型数据库,常用于网站业务和一些WEB系统业务,下面这篇文章主要给大家介绍了关于MySQL导出sql脚本文件操作的相关资料,需要的朋友可以参考下
    2023-01-01
  • mysql忘记root密码的解决办法(针对不同mysql版本)

    mysql忘记root密码的解决办法(针对不同mysql版本)

    这篇文章主要介绍了mysql忘记root密码的解决办法(针对不同mysql版本),文章通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-06-06
  • mysql字符集和数据库引擎修改方法分享

    mysql字符集和数据库引擎修改方法分享

    使用虚拟主机空间上的phpmyadmin操作数据库的时候,如果看到phpmyadmin首页上显示的MySQL 字符集为cp1252 West European (latin1),当我们导入数据时就会出现乱码
    2012-02-02
  • MySQL使用正则表达式进行查询操作经典实例总结

    MySQL使用正则表达式进行查询操作经典实例总结

    这篇文章主要介绍了MySQL使用正则表达式进行查询操作,结合实例形式总结分析了各种常见匹配模式的查询操作实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • mysql学习笔记之完整的select语句用法实例详解

    mysql学习笔记之完整的select语句用法实例详解

    这篇文章主要介绍了mysql学习笔记之完整的select语句用法,结合实例形式详细分析了mysql select语句各种常见参数、使用方法及操作注意事项,需要的朋友可以参考下
    2020-04-04

最新评论