深入理解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通过INSERT IGNORE INTO插入拼音字符无效问题及解决

    mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决

    这篇文章主要介绍了mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 创建mysql表分区的方法

    创建mysql表分区的方法

    我来给大家介绍一下mysql表分区创建与使用吧,希望对各位同学会有所帮助。表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册。
    2013-10-10
  • MYSQL 解锁与锁表介绍

    MYSQL 解锁与锁表介绍

    相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制
    2017-04-04
  • MySQL系统及自定义变量方式

    MySQL系统及自定义变量方式

    这篇文章主要介绍了MySQL系统及自定义变量方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • MySQL中的悲观锁与乐观锁

    MySQL中的悲观锁与乐观锁

    这篇文章主要介绍了MySQL中悲观锁与乐观锁的相关资料,帮助大家更好的理解和学习MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL中join查询的深入探究

    MySQL中join查询的深入探究

    数据库中的JOIN称为连接,连接的主要作用是根据两个或多个表中的列之间的关系,获取存在于不同表中的数据,下面这篇文章主要给大家介绍了关于MySQL中join查询的深入探究,需要的朋友可以参考下
    2022-11-11
  • MySQL 升级方法指南大全

    MySQL 升级方法指南大全

    通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本。例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0。
    2008-01-01
  • Mysql巧用join优化sql的方法详解

    Mysql巧用join优化sql的方法详解

    这篇文章主要给大家介绍了关于Mysql巧用join优化sql的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • [MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog

    [MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog

    这篇文章主要介绍了mysql彻底解析Mixed日志格式的binlog,需要的朋友可以参考下
    2014-02-02
  • Mysql DDL常见操作汇总

    Mysql DDL常见操作汇总

    这篇文章主要介绍了Mysql DDL常见操作汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论