MySQL 中 varchar 和 char 的区别

在 MySQL 中,VARCHARCHAR 是两种常用的字符串类型,它们在存储方式、长度限制和使用场景等方面存在显著区别。


1. 定义与存储方式

CHAR

  • 定义CHAR(n) 是一种定长字符串类型,长度固定为 n
  • 存储方式:存储时无论实际字符串长度如何,都会占用 n 个字符的空间。如果长度不足,会在末尾自动填充空格。
  • 特点:适用于长度固定的字符串,存储效率高,但可能浪费存储空间。

VARCHAR

  • 定义VARCHAR(n) 是一种变长字符串类型,最大长度为 n
  • 存储方式:存储时仅占用实际字符串长度的空间,并额外增加 1~2 个字节记录长度(长度小于 255 时使用 1 个字节,超过 255 使用 2 个字节)。
  • 特点:适用于长度不固定的字符串,节省空间,但在更新数据时可能涉及额外的存储操作。

2. 长度限制

  • CHAR

    • 最大长度为 255 个字符。
  • VARCHAR

    • 最大长度为 65535 字节(包括字符串和记录长度的存储字节),但受限于行的最大存储大小。

3. 存储效率

  • CHAR

    • 由于是定长字符串,读取速度更快,但对于短字符串可能浪费空间。
    • 在频繁更新时性能较稳定,不需要重新调整存储空间。
  • VARCHAR
    • 对于短字符串,空间利用率高,但频繁更新可能需要重新分配存储空间,导致性能下降。

4. 使用场景

  • CHAR

    • 适合存储长度固定的字符串,如身份证号、邮政编码、固定长度的账号等。
  • VARCHAR
    • 适合存储长度变化较大的字符串,如用户名、邮件地址、描述性文字等。

5. 示例

表定义

CREATE TABLE example (
char_column CHAR(10),
varchar_column VARCHAR(10)
);

插入数据

INSERT INTO example (char_column, varchar_column) VALUES ('abc', 'abc');

存储结果

假设我们存储了字符串 'abc'

  • CHAR:会存储为 'abc '(长度不足部分用空格填充)。
  • VARCHAR:只存储 'abc',并额外增加 1 个字节记录长度。

6. 查询表现

如果查询中存在空格填充问题,CHAR 列的结果可能与预期不符。例如:

SELECT LENGTH(char_column), LENGTH(varchar_column) FROM example;

结果

LENGTH(char_column) LENGTH(varchar_column) 10 3

7. 总结

特性 CHAR VARCHAR
长度限制 固定长度,最多 255 个字符 最大长度 65535 字节
存储方式 定长存储,空间固定 变长存储,节省空间
存储效率 读取速度快,更新效率高 存储灵活,更新性能稍差
适用场景 长度固定的字段,如 ID、邮编 长度不定的字段,如用户名

建议

  • 如果数据长度固定或几乎固定,优先选择 CHAR
  • 如果数据长度变化较大,优先选择 VARCHAR,以节省存储空间。

MySQL 中 varchar 和 char 有什么区别?的更多相关文章

  1. MySQL中varchar与char区别

    MySQL中varchar与char区别(转) MySQL中varchar最大长度是多少? 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字 ...

  2. MySql中varchar和char,如何选择合适的数据类型?

    背景 学过MySQL的同学都知道MySQL中varchar和char是两种最主要的字符串类型,varchar是变长的类型,而char是固定长度.那关于如何选择类型就成为令人头疼的事,很多初学者为了保证 ...

  3. Mysql中varchar和char区别

    一.varchar和char的区别: 区别一:定长和变长 char表示定长.长度固定,varchanr表示变长,即长度可变. 即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取 ...

  4. mysql 中Varchar 与char的区别

    一.字符与字节与编码关系 ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制.最 ...

  5. mysql中varchar和char区别(思维导图整理)

    由于mysql一直是我的弱项(其实各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char区别,所以整理一下,便于以后遗忘. 0.0图片已经说明一切,但是系统说我字数不够,我真能 ...

  6. MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义

     varchar与char的区别: 1).varchar与char的区别char是一种固定长度的类型,varchar则是一种可变长度的类型 尽可能的使用 varchar 代替 char ,因为首先变长 ...

  7. MySQL中VARCHAR与CHAR格式数据的区别

    区别 CHAR与VARCHAR类型类似,但它们保存和检索的方式不同.CHAR有固定的长度,而VARCHAR属于可变长的字符类型.它们最大长度和是否尾部空格被保留等方面也不同.在存储和检索过程中不进行大 ...

  8. MySQL数据库中varchar与char类型的区别

    在数据库中建表时,需要给数据定义一个数据库中的数据库类型,当需要给String类型定义一个数据库中的类型时,可以看见有两个选择,一个是varchar,另一个是char,有很多人不清楚两者的区别,包括自 ...

  9. 浅谈mysql中varchar(m)与char(n)的区别与联系

    mysql建表长度的限制 在mysql建表时,出现以下报错信息: 错误一:行大小过大,所使用的表这种类型的最大的行大小,不算BLOB类型,是65535.(这是我翻译的)    原因是MySQL在建表的 ...

  10. 【转】MySQL中varchar最大长度是多少?

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

随机推荐

  1. 金泰克S300固态硬盘 SM2256K开卡量产

    开卡原因:固态硬盘出现开机正常,用一会就找不到硬盘了,电脑冷启动后又可以识别硬盘,决定根据网上教程进行开卡量产修复试试. 硬盘型号:tigo S300 120GB,主控芯片SM2256K AB,闪存颗 ...

  2. 10GSFP+系列光模块

    10GSFP+双纤系列光模块包括SR.LRM.LR.ER.ZR模块,它们的接口类型都是LC双工,且符合IEEE802.3ae.SFF-8472和SFF-8431标准,以下是这几种光模块的具体详情. 1 ...

  3. 5.main.js配置

    1.根目录新建api文件夹 api文件夹分mock(存放虚拟json)和urls(api请求链接) urls 中新建index.js来汇总按分类拆分的url请求文件     2.添加api配置 imp ...

  4. Windows 提权-SeImpersonatePrivilege 特权

    本文通过 Google 翻译 SeImpersonatePrivilege – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校 ...

  5. AGC015D题解

    简要题意 给定一个区间 \([l,r]\),从中选出若干整数按位或,求可能出现的数的方案数. 数据范围:\(1\le l\le r\le2^{60}\). 思路 首先对于 \([l,r]\) 里的数全 ...

  6. Vulkan环境配置 | vscode+msvc 解决方案

    Vulkan环境配置 | vscode+msvc 解决方案 前言 如果作为Windows 11侠的你是一个vscode爱好者,凑巧电脑上还安装有Visual Studio,这个时候你突然想配置一个Vu ...

  7. 数据挖掘 | 数据隐私(1) | 差分隐私 | 挑战数据隐私(Some Attempts at Data Privacy)

    L1-Some Attempts at Data Privacy 本随笔基于Gautam Kamath教授的系列课程:CS 860 - Algorithms for Private Data Anal ...

  8. 洛谷P11250 [GESP202409 八级] 手套配对 题解

    题目传送门. 非常简单的组合数学题. 首先从 \(n\) 对手套中恰好选出 \(k\) 对手套的方案数为 \(C_n^k\),然后由于我们要取出 \(m\) 只手套,那么取了 \(k\) 对手套后还要 ...

  9. 05_模块(import & from)

    模块(import & from) 导入模块 在和.py同级文件夹下创建一个自定义的模块 fibo.py def fib_return(x): a, b = 0, 1 result = [] ...

  10. MySQL索引最左原则:从原理到实战的深度解析

    MySQL索引最左原则:从原理到实战的深度解析 一.什么是索引最左原则? 索引最左原则是MySQL复合索引使用的核心规则,简单来说: "当使用复合索引(多列索引)时,查询条件必须从索引的最左 ...