前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >varchar(20)和varchar(255)的区别,数据库表字段长度设计学习

varchar(20)和varchar(255)的区别,数据库表字段长度设计学习

作者头像
海加尔金鹰
发布2020-06-09 10:01:15
3.7K0
发布2020-06-09 10:01:15
举报

学习原因

在开发当中,经常看见有些字段长度是varchar(20)或者varchar(32),但是在自己建表的时候,navicat基本上都是默认的varchar(255)的长度。 所以带着疑问来学习一下数据库表字段长度的设计。

长度限制和字段选择

查阅了资料后,发现了一些关于数据库的长度限制及表设计的相关资料

相关资料: 各个数据库表名和字段名长度限制 MySQL中各种数据类型的长度及在开发中如何选择 MySql数据库表字段命名及设计规范 数据库中存储日期的字段类型到底应该用varchar还是datetime 为什么很多公司要求 mysql 表主键 id 必须是 long 型? 为什么mysql的varchar字符长度会被经常性的设置成255

在仔细阅读上述的相关资料后,算是解决了很多的疑问,也学习到了不少数据库书本上难以学习到的经验。 总的来说就是数据库表名和字段长度是有一个限制的,不是越大就好,在设计创建表字段时也要考虑下字段长度问题,根据一些实际情况选择表当中的字段类型和手动设置一下字段的长度,可以对数据的维护,查询带来效率和性能上的提升。

验证varchar(20)和varchar(255)的区别

关于这个问题,也在网上找了很多的资料进行查看,既然是学习嘛,光看是没有什么意思的,还是要动手验证一下。

相关资料: varchar(500)比varchar(8000)更有优势吗? MySQL中采用类型varchar(20)和varchar(255)对性能上的影响

创建一个测试表,并创建相关的字段,存入1000条数据。具体操作如下

CREATE TABLE ABC (
  id int(11) DEFAULT NULL,
  name varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 创建表
ALTER  TABLE  ABC  ADD  INDEX nameIndex (name);  -- 给name 字段添加索引
explain select name from ABC;    --  分析这个查询sql语句

结果如下图:

图片.png
图片.png
在这里插入图片描述
在这里插入图片描述

可以看到此时的KEY_LEN为63 然后往表里面存1000条数据,直接复制粘贴1000条一样的数据用于测试,查看表空间大小

SELECT CONCAT(TRUNCATE(SUM(data_length),2),'B') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length),2),'B') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free),2),'B') AS data_free,
CONCAT(TRUNCATE(SUM(index_length),2),'B') AS index_size
FROM information_schema.tables WHERE TABLE_NAME = 'ABC';

结果如下图:

图片.png
图片.png

可以看见:data_size的值为:16384 然后修改字段name的长度为255,再次查看key_len和data_size的值

alter table ABC  modify name varchar(255);
explain select name from ABC;
SELECT CONCAT(TRUNCATE(SUM(data_length),2),'B') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length),2),'B') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free),2),'B') AS data_free,
CONCAT(TRUNCATE(SUM(index_length),2),'B') AS index_size
FROM information_schema.tables WHERE TABLE_NAME = 'ABC';

结果如下: KEY_LEN变成了768 但是data_size没有变化。 验证完毕:得出结论,通常情况下使用varchar(20)和varchar(255)占用的空间都是一样的,但是使用索引长度有所不同。所以在设计时尽量保持一个合理的长度范围。

额外的发现

在测试当中还有一个些的发现:表字段的类型其实是有长度限制,int类型最大为255等等。 一个表,所有字段的长度加起来不能超过65535字节,是字节不是字符 。不包括text blob类型的字段。


标题:varchar(20)和varchar(255)的区别,数据库表字段长度设计学习 作者:海加尔金鹰 地址:https://www.hjljy.cn/articles/2019/05/21/1558368169678.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学习原因
  • 长度限制和字段选择
  • 验证varchar(20)和varchar(255)的区别
  • 额外的发现
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档