char 和 varchar

本文详细介绍了SQL中char和varchar两种字符数据类型的特性及应用场景。char为固定长度字符类型,适合存储长度一致的数据;而varchar则为可变长度字符类型,适用于存储长度变化较大的数据。文中还解释了这两种数据类型的存储机制及其默认设置。
部署运行你感兴趣的模型镜像

char   和   varchar
固定长度   (char)   或可变长度   (varchar)   字符数据类型。
char[(n)]
长度为   n   个字节的固定长度且非   Unicode   的字符数据。n   必须是一个介于   1   和   8,000   之间的数值。存储大小为   n   个字节。char   在   SQL-92   中的同义词为   character。
varchar[(n)]
长度为   n   个字节的可变长度且非   Unicode   的字符数据。n   必须是一个介于   1   和   8,000   之间的数值。存储大小为输入数据的字节的实际长度,而不是   n   个字节。所输入的数据字符长度可以为零。varchar   在   SQL-92   中的同义词为   char   varying   或   character   varying。
注释
如果没有在数据定义或变量声明语句中指定   n,则默认长度为   1。如果没有使用   CAST   函数指定   n,则默认长度为   30。

将为使用   char   或   varchar   的对象被指派数据库的默认排序规则,除非用   COLLATE   子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

支持多语言的站点应考虑使用   Unicode   nchar   或   nvarchar   数据类型以尽量减少字符转换问题。如果使用   char   或   varchar:  

如果希望列中的数据值大小接近一致,请使用   char。


如果希望列中的数据值大小显著不同,请使用   varchar。  
如果执行   CREATE   TABLE   或   ALTER   TABLE   时   SET   ANSI_PADDING   为   OFF,则一个定义为   NULL   的   char   列将被作为   varchar   处理。  

当排序规则代码页使用双字节字符时,存储大小仍然为   n   个字节。根据字符串的不同,n   个字节的存储大小可能小于   n   个字符。

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

### 区别 - **长度特性**:CHAR 是固定长度的数据类型,定义时需指定固定长度,存储数据时若长度不足则用空格填充;VARCHAR 是可变长度的数据类型,存储数据时按实际长度存储,无需用空格填充多余长度 [^1][^2][^4]。 - **存储方式**:CHAR 数据段之间无间隔,因创建列时已告知 MySQL 列长度,查询时按固定长度寻找数据;VARCHAR 每个数据段开头用 1 - 2 个字节存放数据段长度,结尾用 1 个字节标记字段节数,读取时先读开头确定长度再读取相应字节 [^5]。 - **查询性能**:CHAR 的存取速度比 VARCHAR 快很多,因其长度固定,便于程序存储与查找;VARCHAR 以空间效率为先,查询时需多次读取磁盘获取字段真实长度,导致查询效率低于 CHAR [^4][^5]。 - **空间占用**:CHAR 以空间换取时间效率,可能存在多余空格占位符占据空间;VARCHAR存储空间敏感场景,特别是数据量巨大且字符串长度不均时,可显著减少存储开销 [^1][^4]。 ### 特点 - **CHAR**:长度固定,查询性能好,但可能浪费存储空间,适合存储长度固定且较短的数据,对查询性能要求较高的场景 [^2][^4]。 - **VARCHAR**:长度可变,节省存储空间,但查询性能相对较差,适合存储长度不固定、差异较大的数据 [^1][^2]。 ### 使用场景 - **CHAR 使用场景**:当字符串长度固定且较短,或者对存储空间不是特别敏感但对查询性能有较高要求时可使用,如国家代码(总是固定的 2 字符字符串)、身份证号、手机号等 [^1][^2]。当空间消耗不是影响因素重点时,尽量选取 CHAR 类型,因其在其他方面有一定优势 [^3]。 - **VARCHAR 使用场景**:适用于可变长度的数据,如用户姓名、电子邮件地址或描述性文本等。在存储空间敏感,特别是数据量巨大且字符串长度不均的场景中,VARCHAR 是更好的选择 [^1][^2]。 ```python # 示例代码,假设使用 Python MySQL 连接库 import mysql.connector mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) mycursor = mydb.cursor() # 创建包含 CHAR VARCHAR 类型的表 mycursor.execute("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, country_code CHAR(2), username VARCHAR(50))") # 插入数据 sql = "INSERT INTO users (country_code, username) VALUES (%s, %s)" val = ("US", "john_doe") mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "record inserted.") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值