很多时候我们设置varchar(255)都习以为常了,甚至我还遇到过有人以为varchar不能设置超过255的人。其实varchar没有明确最大长度,然后有人说那65535字节(bytes)不是吗?

但是事实上如果你用的 utf8 编码的话按理最大可以设置到 varchar(21845),但是其实一般都会说你超出。其实MySQL要求一个行定义长度不能超过 65535 bytes(所有字符串类型字段包括其字段名称占用空间都计算在内, text、blob等大字段类型除外)。

如下图我先设置了个21842成功了,后面加个长度为3的varchar都会报错,所有如果一个表有很多varchar字段的时候,不应该把varchar设置的特别大,会影响后面的字段

言归正传那为什么我们会经常性设置成varchar(255)呢?

首先我们要知道一个概念:InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes)(前缀长度适用于mysql5.6及以前,后续版本有变化)

你如果需要建索引,就不能超过 767 bytes(mysql5.6及以前,后续版本有变化);utf8编码时 255*3=765bytes ,恰恰是能建索引情况下的最大值。

如果像lavavel5.3往后 使用的是utf8mb4编码,默认字符长度则应该是 767除以4向下取整,也就是191。

总结:varchar(255) 不是最优的字符长度,最优还是应该根据实际需要的来。但是这是一个保证你能少出错的一个很好的默认值

为什么mysql的varchar字符长度会被经常性的设置成255—— 不明其理的约定俗成(一)相关推荐

  1. MySQL字符集编码中,VARCHAR 字符长度与字节长度的理解

    MySQL中基于 UTF-8 字符集编码,VARCHAR 字符长度与字节长度的理解 UTF-8 字符集 utf8mb4 字符集 参考 UTF-8 字符集 在 mysql 4.1 及之前早期版本中,如果 ...

  2. MySQL中varchar最大长度是多少

    一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)  5.0版本以上,varchar(20),指的是20字符, ...

  3. mysql int11 最大值_int(11)最大长度是多少,MySQL中varchar最大长度是多少(转)

    int(11)最大长度是多少,MySQL中varchar最大长度是多少? int(11)最大长度是多少? 在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度. 这个11代表 ...

  4. MySQL中VARCHAR最大长度是多少?CHAR和VARCHAR有哪些区别?

    以我多年经验来看,VARCHAR的最大长度.字符串类型选择,用MySQL的人中十之七八是不清楚的. 本文不止介绍了原理,还提供了案例手把手教你自己分析,彻底解决你的疑惑. 假设有个VARCHAR(64 ...

  5. 【256期】MySQL 中 varchar 最大长度?char 和 varchar 有什么区别?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 以我多年经 ...

  6. MySql中varchar类型长度的含义、Java中String长度的含义

    varchar(5)表示的是字符长度5,不是字节数

  7. 为什么经常把VARCHAR长度设置成255,而不是更大

    首先VARCHAR不是定长的,而是可变的,所以一般业务开发我们都要尽量使用最小的长度来满足需求,以免浪费空间,影响性能,而既然是可变的长度,那就得有保存长度的地方,所以如果VARCHAR的长度设置在2 ...

  8. MySQL的varchar定义长度到底是字节还是字符

    相信这个问题也会困扰不少人,尤其是使用过其它数据库(如Oracle)的人,之前我也没有太在意这个问题,再加上一些书籍和网上的文章讲的不够细致,又没测试过,导致我一直理解错误.下面通过实例来解释,在开始 ...

  9. MySQL中varchar最大长度是多少(真正的官网解释,事实说话)

    Mysql5.6 字符集 utf8mb4 中varcha的长度最大为15936 使用二分法试出来的(见下图) 经过反复测试,最大值那个错误,官网说法最大值是65535bytes,utf8mb4每个字符 ...

最新文章

  1. 《信息学奥赛一本通》分治算法 找数 例题
  2. 基于UDP的组播网络程序
  3. 江苏单招计算机网络试卷,江苏省2016年对口单招计算机专业综合理论试卷.doc
  4. .net Redis缓存优化提高加载速度和服务器性能(二)
  5. java 命名参数动态替换_使用Kettle的命名参数动态执行作业
  6. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(3)
  7. centos6.4安装apache php mysql_CentOS 6.4配置Apache+PHP5+MySQL(lamp)环境以及报错处理思路...
  8. 一些值得注意的算法题——队列、栈
  9. React纯前端生成word文档(支持多图片导出)
  10. 产品的10大设计原则
  11. mysql的month_MySQL month()函数
  12. Webpack中 CDN加速
  13. jvm的内存分布,参数配置 和 GC处理机制
  14. BI神器Power Query(19)-- PQ提取商品信息
  15. Oracle同义词的好处
  16. 【T+】畅捷通T+服务管理中,异步任务服务(TPlusPopAsyncTaskService1700)无法启动
  17. 怎么禁用笔记本的触摸板
  18. centos 安装并使用rar解压压缩文件
  19. selenium之浏览器弹出新窗口并在新窗口操作
  20. 解决 fatal: unable to access ‘https://github.com/qweertu/git-demo.git/‘: error setting certificate...

热门文章

  1. 最好的3个iOS苹果手机上的epub阅读器
  2. 留言赠书|4位GNN一线大佬联手编撰新书,还未出版就爆火!
  3. ZYNQ裸板:中断篇
  4. 树莓派使用mosquito实现订阅发布
  5. 主机维护服务器,主机服务器维护
  6. 语音测试软件 呼+未,PA+MATE7 中国移动VoLTE测试工具使用v1_20160115
  7. 伦敦玛丽皇后学院计算机,【精选】伦敦大学玛丽皇后学院计算机科学本科.pdf...
  8. 省赛题第六届到第十二届单独分析
  9. 系统调用捕获和分析—Ring3层LD_PRELOAD机制进行库函数劫持
  10. 斯坦福飞鱼滑翔装置完胜跳跃机器人