mysql varchar长度问题

mysql 如果字段值可能就三四个汉字 那么 varchar(10) 和varchar(255) 有什么区别

区别在于预留内存空间,比如#表示一个预留空间,varchar(5) == ##### ,varchar(10) == ##########
那么 张三 这个值客观上就是这样的 在varchar(5)情况下为 张三### ,在varchar(10)为 张三########,有些浪费资源

VARCHAR(10) 和 VARCHAR(255) 的主要区别在于存储空间的不同。

VARCHAR(10) 可以存储最多10个字符,而 VARCHAR(255) 可以存储最多255个字符。因此,如果您预计字段值最多只有3-4个汉字,VARCHAR(10) 就足够了,并且可以节省存储空间。然而,如果您预计字段值可能更长,则需要使用 VARCHAR(255) 或更大的值。

对于5.0之后的版本:
在磁盘存储上是没有什么区别的,变长存储最后占用的磁盘空间都是一样的。而且5.0以后设置的是最大存储字符数长度,而不是最大存储字节数的长度,也没必要考虑内存对齐的问题。
但是读取到内存上是有区别的,varchar(n)n越大,占用的空间越大
如果字段值很短,建议使用 char(4) ,varchar 存储还需要计算字符串长度,读取的时候还有可能因为设置的长度过长导致出现分页之类的情况。

varchar类型是固定长度的
你设置成10,那么即使里面只存3个字符,它也占10个字符的空间,后面会用\0补齐
在高级语言里取值的时候可能会造成有多余的字符
如果不想后面有多余的字符,可以改用text类型

  • 文章:MySQL varchar类型自动递增 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: mysql 数据库中varchar的存储单位是什么中的 二、mysql数据库中varchar的长度与字节、字符的关系 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 准备sql脚本:

    CREATE TABLE `test` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `content` varchar(5) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    insert into test (id, content) values(default, 'abcde');
    insert into test (id, content) values(default, '12345');
    insert into test (id, content) values(default, '!@#$%');
    insert into test (id, content) values(default, '你好就是我');
    
    select * from test;
    
    
    #查看mysql版本号
    select version();
    

    分析:四条语句(英文字母/数字/字符/中文)都能正确插入(当前mysql版本号8),查询结果如下:

    mysql版本号: