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类型
准备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版本号: