MySql 字符串类型 - char、varchar

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySql 字符串类型 - char、varchar

字符串类型常用的包括: char、varchar、text、enum、set


  • 定长字符类型 char:


适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。 设定形式: 字段名称 char(字符个数)


其特点是: 1、存储的字符长度固定,最长可设定为255个字符 2、如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度。 3、相对varchar类型,其存取速度更快。


  • 变长字符类型 varchar:


适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。 设定形式: 字段名称 varchar(字符个数)


其特点是:


1、存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532 (字节)。 (1)、注:由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的; (2)、英文:一个字符占一个字节; (3)、中文(gbk编码) :一个字符占2个字节; (4)、中文(uf8编码) :一个字符占3个字节;


2、如果实际写入的字符不足设定的长度,就按实际的长度存储。


3、相对于char字符串,其存职速度相对更慢。


  • char 与 varchar 区别


首先明确的是,char的长度是不可变的,而varchar的长度是可变的,


定义一个 char(10) 和 varchar(10), 如果存进去的是 abcd, 那么char 所占的长度依然为 10,除了字符 abcd 外,后面跟六个空格,而varchar 就立马把长度变为 4 了,取数据的时候,char 类型的要用 trim() 去掉多余的空格,而 varchar 是不需要的。


char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。


char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。


``` mysql> create table charTest (id int autoincrement primary key, code char(6), name varchar(6)); mysql> desc charTest; +-------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | autoincrement | | code | char(6) | YES | | NULL | | | name | varchar(6) | YES | | NULL | | +-------+------------+------+-----+---------+----------------+


mysql> insert into charTest (code, name) values ('123456', '123456'); mysql> select * from charTest; +----+--------+--------+ | id | code | name | +----+--------+--------+ | 1 | 123456 | 123456 | +----+--------+--------+


mysql> insert into charTest (code, name) values ('123456789', '123456789'); ERROR 1406 (22001): Data too long for column 'code' at row 1


mysql> insert into charTest (code, name) values ('123456', '123456789'); ERROR 1406 (22001): Data too long for column 'name' at row 1


mysql> insert into charTest (code, name) values ('一二三四五六', '一二三四五六'); mysql> select * from charTest; +----+--------------------+--------------------+ | id | code | name | +----+--------------------+--------------------+ | 1 | 123456 | 123456 | | 2 | 一二三四五六 | 一二三四五六 | +----+--------------------+--------------------+ ```


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
存储 关系型数据库 MySQL
MySQL 字段类型探究:深入理解 Varchar(50) 与 Varchar(500)
在MySQL数据库中,`VARCHAR`类型是一种常用的字符串存储类型,它允许定义一个可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储和性能方面也有显著的区别。本文将深入探讨这两种字段类型的区别,以及它们在实际应用中的选择。
44 3
|
3月前
|
SQL 自然语言处理 关系型数据库
MySQL的match匹配多个字符串的语法
【8月更文挑战第27天】MySQL的match匹配多个字符串的语法
219 67
|
15天前
|
存储 关系型数据库 MySQL
MySQL 字段类型深度解析:VARCHAR(50) 与 VARCHAR(500) 的差异
在MySQL数据库中,`VARCHAR`类型是一种非常灵活的字符串存储类型,它允许存储可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储效率、性能和使用场景上也有所不同。本文将深入探讨这两种字段类型的区别及其对数据库设计的影响。
28 2
|
3月前
|
SQL 自然语言处理 关系型数据库
MySQL的match匹配多个字符串的语法
【8月更文挑战第29天】MySQL的match匹配多个字符串的语法
132 2
|
2月前
|
SQL 关系型数据库 MySQL
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
180 0
|
3月前
|
存储 关系型数据库 MySQL
|
3月前
|
存储 数据管理 数据库
|
3月前
|
前端开发 关系型数据库 MySQL
mysql截断字符串
在MySQL中,有多种方法可以实现字符串的截断,每种方法都有其特定的应用场景。通过灵活使用这些字符串处理函数,可以高效地对数据进行处理和分析。在实际的数据库操作中,根据实际需求选择最合适的函数是关键。
138 0
|
3月前
|
存储 关系型数据库 MySQL
在 MySQL 中使用 CHAR
【8月更文挑战第11天】
65 0
|
存储 关系型数据库 MySQL
面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。
119 0
下一篇
无影云桌面