深入理解MySQL varchar(50)

 更新时间:2024年01月10日 10:21:27   作者:YYAugenstern  
日常开发中,数据库建表是必不可少的一个环节,建表的时候通常会看到设定某个字段的长度为varchar(50),那么你知道是什么意思吗,感兴趣的可以了解一下

一、理解MySQL varchar(50)

1.1、概述

日常开发中,数据库建表是必不可少的一个环节,建表的时候通常会看到设定某个字段的长度为varchar(50),例如如下建表语句:

 那么怎么理解varchar(50)?这个分情况的,MySQL的版本不同,存储的字符长度也不同,具体来讲如下:

(1)4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节);

(2)5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个;

其实最好的办法是在自己数据库中建个表试试可以放多少汉字,现在公司开发中MySQL的版本至少都为5.xx版本及以上版本了,所以说varchar(50)是可以存50个汉字的;

1.2、验证 

1.2.1、当前MySQL的版本

1.2.2、数据库验证

(一)初始化表

DROP TABLE IF EXISTS `account`;
CREATE TABLE `account`  (
     `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
     `is_deleted` int NOT NULL DEFAULT 0 COMMENT '删除标识 0:未删除、1:已删除',
     `create_time` datetime NOT NULL COMMENT '创建时间',
     `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
     `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
     `money` decimal(10,0) NULL DEFAULT NULL COMMENT '账户余额',
     `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
     PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '账户表' ROW_FORMAT = DYNAMIC;

insert into `account` values
(null,0,now(),now(),'张三','1000000','zhangsan@qq.com'),
(null,0,now(),now(),'尼古拉斯赵四','3000000','zhaosi@qq.com');

(二)查询name占用几个字符

select `name`,char_length(`name`) from account;

1.3、题外话 

MySQL中的length VS char_length:

length():mysql里面的length()函数是一个用来获取字符串长度的内置函数;

char_length():在mysql内置函数里面查看字符串长度的还有一个函数是char_length();

区别:

length(): 单位是字节,utf8编码下,一个汉字三个字节,一个数字或字母一个字节。gbk编码下,一个汉字两个字节,一个数字或字母一个字节;

char_length():单位为字符,不管汉字还是数字或者是字母都算是一个字符;

MySQL 中 varchar 与 char 的区别?varchar(30) 中的 30 代表的涵义? 

在MySQL中,varchar和char都是用于存储可变长度字符串的数据类型,但它们之间存在一些关键的区别。

  • 存储空间:varchar存储的是实际存储在其中的字符数,而char存储的是指定的固定长度的字符数。这意味着如果一个字符串的实际长度小于varchar类型指定的长度,那么存储空间会得到更有效的利用。相反,如果一个字符串的实际长度超过char类型指定的长度,那么多余的字符会被忽略。
  • 性能:由于varchar根据实际存储的数据量分配空间,所以它通常比char更快,特别是在处理大量数据时。
  • 可变长度:varchar允许字符串的长度改变,这意味着它可以存储不同长度的字符串。另一方面,char在创建时就已经确定了长度,所以它不能动态地改变大小。

现在来看一下varchar(30)中的数字30:

varchar(30)表示一个可以存储最多30个字符的可变长度字符串。这里的数字30是一个最大值,实际存储的字符数可能会少于这个数字,具体取决于实际存储的字符串长度。

总的来说,选择使用varchar还是char主要取决于你的具体需求。如果你知道你的数据可能会包含不同长度的字符串,那么使用varchar可能是一个更好的选择。如果你知道你的字符串将始终具有相同的长度,那么使用char可能更为合适。

到此这篇关于深入理解MySQL varchar(50)的文章就介绍到这了,更多相关MySQL varchar(50)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL自动为查询数据结果加序号

    MySQL自动为查询数据结果加序号

    这篇文章主要给大家介绍了关于MYSQL如何自动为查询数据的结果编上序号的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2022-12-12
  • mysql innodb的监控(系统层,数据库层)

    mysql innodb的监控(系统层,数据库层)

    这篇文章主要介绍了mysql innodb的监控(系统层,数据库层)的相关资料,需要的朋友可以参考下
    2017-04-04
  • CentOS 6.5 i386 安装MySQL 5.7.18详细教程

    CentOS 6.5 i386 安装MySQL 5.7.18详细教程

    这篇文章主要介绍了CentOS 6.5 i386 安装MySQL 5.7.18详细教程,需要的朋友可以参考下
    2017-04-04
  • MYSQL数据库如何设置主从同步

    MYSQL数据库如何设置主从同步

    大家好,本篇文章主要讲的是MYSQL数据库如何设置主从同步,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • MySQL编码不一致可能引起的一些问题

    MySQL编码不一致可能引起的一些问题

    这篇文章主要给大家介绍了关于MySQL编码不一致可能引起的一些问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Mysql InnoDB删除数据后释放磁盘空间的方法

    Mysql InnoDB删除数据后释放磁盘空间的方法

    这篇文章主要介绍了Mysql InnoDB删除数据后释放磁盘空间的方法,Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长,本文就讲解释放磁盘空间的方法,需要的朋友可以参考下
    2015-04-04
  • 详解mysql中的字符集和校验规则

    详解mysql中的字符集和校验规则

    这篇文章主要介绍了mysql中的字符集和校验规则的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-12-12
  • Mysql5.7.17 winx64.zip解压缩版安装配置图文教程

    Mysql5.7.17 winx64.zip解压缩版安装配置图文教程

    这篇文章主要介绍了Mysql5.7.17 winx64.zip解压缩版安装配置图文教程,需要的朋友可以参考下
    2018-03-03
  • MySQL深分页问题及三种解决方案

    MySQL深分页问题及三种解决方案

    本文主要介绍了MySQL深分页问题及三种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Linux中安装MySql 5.7.21的详细操作步骤

    Linux中安装MySql 5.7.21的详细操作步骤

    这篇文章主要给大家介绍了关于在Linux中安装MySql 5.7.21的详细操作步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01

最新评论