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 8.0.22 安装配置方法图文教程

    mysql 8.0.22 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.22 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • mysql 8.0.18各版本安装及安装中出现的问题(精华总结)

    mysql 8.0.18各版本安装及安装中出现的问题(精华总结)

    这篇文章主要介绍了mysql 8.0.18各版本安装及安装中出现的问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 详解在MySQL中创建表的教程

    详解在MySQL中创建表的教程

    这篇文章主要介绍了详解在MySQL中创建表的教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • mysql中异常错误ERROR:2002的解决方法

    mysql中异常错误ERROR:2002的解决方法

    最近在启动mysql的时候发现mysql报错了,错误代码是2002,通过查找相关的资料发现是var/lib/mysql 的访问权限问题,所以这篇文章主要介绍了mysql中异常错误ERROR:2002的解决方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Mysql中mvcc各场景理解应用

    Mysql中mvcc各场景理解应用

    这篇文章主要为大家介绍了Mysql中mvcc各场景理解应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 在win10系统下安装Mysql 5.7.17图文教程

    在win10系统下安装Mysql 5.7.17图文教程

    因为想要在公司电脑上安装Mysql,于是到官网上下载了最新版本的Mysql-5.7.17,其实安装方法也很简单,下面小编把安装过程分享到脚本之家平台供大家参考
    2017-03-03
  • 虚拟机linux端mysql数据库无法远程访问的解决办法

    虚拟机linux端mysql数据库无法远程访问的解决办法

    最近在项目搭建过程中遇到一问题,有关虚拟机linux端mysql数据库无法远程访问,通过查阅相关数据库资料问题解决,下面把具体的解决办法分享给大家,有需要的朋友可以参考下
    2015-08-08
  • MySQL时间戳与日期格式的相互转换

    MySQL时间戳与日期格式的相互转换

    在MySQL数据库中,时间戳和日期格式是常用的数据类型,在MySQL中,我们可以使用函数还相互转换时间戳和日期格式,下面我将详细的给大家介绍如何进行转换,并提供相应的代码示例,感兴趣的小伙伴跟着小编一起来看看吧
    2024-01-01
  • 解析在MySQL里创建外键时ERROR 1005的解决办法

    解析在MySQL里创建外键时ERROR 1005的解决办法

    本篇文章是对在MySQL里创建外键时ERROR 1005的解决办法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • mysql 8.0.24 安装配置方法图文教程

    mysql 8.0.24 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.24 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论