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

作者:hebedich 时间:2024-01-15 01:58:25 

区别

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

下面的表格显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

值 CHAR(4) 存储需求 VARCHAR(4) 存储需求
'' ' ' 4个字节 '' 1个字节
'ab' 'ab ' 4个字节 'ab' 3个字节
'abcd' 'abcd' 4个字节 'abcd' 5个字节
'abcdefgh' 'abcd' 4个字节 'abcd' 5个字节

从上面可以看得出来CHAR的长度是固定的,不管你存储的数据是多少他都会都固定的长度。而VARCHAR则处可变长度但他要在总长度上加1字节,这个用来存储字符长度(如果声明的长度超过255,则使用2个字节)。所以实际应用中用户可以根据自己的数据类型来做。

请注意,上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度的值不被保存,并且会出现错误。

从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。通过下面的例子说明差别:


mysql> CREATE TABLE test(a VARCHAR(4), b CHAR(4));

mysql> INSERT INTO test VALUES ('ab ', 'ab ');

mysql> SELECT CONCAT(a, '+'), CONCAT(b, '+') FROM test;

结果如下:


CONCAT(a, '+') CONCAT(b, '+')
ab + ab+

从上面可以看出来,由于某种原因CHAR有固定长度,所以在处理速度上要比VARCHAR快很多,但是相对浪费存储空间,所以对存储不大,但在速度上有要求的可以使用CHAR类型,反之可以用VARCHAR类型来实现。

建议

MyISAM存储引擎 建议使用固定长度,数据列代替可变长度的数据列
INNODB 存储引擎 建议使用VARCHAR类型

总结分析:

文字字段若长度固定,如:身分证号码,就不要用 varchar 或 nvarchar,应该用 char 或 nchar。
支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题
文字字段若长度不固定,如:地址,则该用 varchar 或 nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率

标签:MySQL,VARCHAR,CHAR
0
投稿

猜你喜欢

  • 轻量级的Web框架Flask 中模块化应用的实现

    2021-04-07 13:08:16
  • Mysql InnoDB引擎中页目录和槽的查找过程

    2024-01-14 09:32:28
  • go语言区块链学习调用智能合约

    2024-04-30 10:01:34
  • 如何设置PyCharm中的Python代码模版(推荐)

    2022-12-14 03:56:29
  • 聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    2022-01-03 19:10:57
  • position:relative/absolute无法冲破的等级

    2007-05-11 17:03:00
  • js将table的每个td的内容自动赋值给其title属性的方法

    2023-08-07 18:34:54
  • 五步让你成为GO 语言高手

    2023-06-16 18:00:41
  • laravel容器延迟加载以及auth扩展详解

    2024-06-05 09:45:06
  • TensorFlow人工智能学习数据合并分割统计示例详解

    2022-01-23 05:14:23
  • 页面自动刷新javascript代码大全

    2010-06-28 18:54:00
  • SQL Server 数据库管理常用的SQL和T-SQL语句

    2024-01-27 22:01:09
  • 详解Python3中的迭代器和生成器及其区别

    2022-11-01 00:37:48
  • Python实现8种常用抽样方法

    2023-02-01 18:03:19
  • 浅析Python自带性能强悍的标准库itertools

    2022-04-28 12:45:19
  • mysql8.0.21下载安装详细教程

    2024-01-26 15:40:00
  • Python venv虚拟环境配置过程解析

    2021-11-30 20:21:48
  • Git操作规范之tag的使用技巧详解

    2022-07-30 05:10:54
  • 用Python实现石头剪刀布游戏

    2023-06-05 05:37:41
  • Python求解排列中的逆序数个数实例

    2021-07-28 15:17:27
  • asp之家 网络编程 m.aspxhome.com