SQL中char\varchar\text与nchar\nvarchar\ntext的区别

本文详细解析了SQL中char、varchar、text与nchar、nvarchar、ntext等字符数据类型的定义、特点及适用场景,帮助读者理解不同类型的使用场合,如固定长度的char适合存储MD5哈希值,而长度可变的nvarchar适用于包含Unicode字符的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL中char\varchar\text与nchar\nvarchar\ntext的区别

定义

  • char
    char(n)是长度不可变的,用于表示非Unicode字符数据。n代表该数据类型所允许保存的字符串的最大长度,它必须是一个介于 18,000 之间的数值,存储大小为 n个字符

  • varchar
    varchar(n)是长度可变的,用于表示非Unicode字符数据。n代表该数据类型所允许保存的字符串的最大长度,它必须是一个介于 18,000 之间的数值,存储大小为输入字符的实际长度,而不是 n个字符。所输入的数据字符长度可以为零。

  • nvarchar
    nvarchar(n)是长度可变的,用于表示Unicode字符数据。n代表该数据类型所允许保存的字符串的最大长度,它必须是一个介于 14,000 之间的数值,存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。

特点

  • char

    • 索引效率高
    • 当输入的字符长度小于指定的最大长度n时,保存的时候会使用trim去掉字符串末尾的空格,并在字符串末尾补空值;当输入的字符长度大于指定的最大长度n时,保存的时候会截去超出的字符
    • 适合保存MD5后的哈希值或经常改变的值,因为固定的行不容易产生碎片
  • varchar

    • 比使用定长类型的char占用更少存储空间,但效率没char
    • 使用额外的1-2字节来存储值长度(实际使用了多少长度),长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间
    • 取值或设置值都会保存字符串末尾的空格
    • 最大长度远大于平均长度,很少发生更新的时候适合使用varchar,因为碎片更少了
  • text

    • text存储可变长度的非Unicode字符数据,最大长度为2^31-1(2,147,483,647)个字符
  • nchar\nvarchar\ntext

    • 这三种从名字上看比前面三种多了个“n”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字则需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示,高位是补位的。nchar\nvarchar的长度是在1到4000之间,无论英文或汉字最多能存储4000个字符;而char\varchar最多能存储8000个英文,4000个汉字。因此在输入的字符为纯英文时使用char\varchar,可减少存储空间的浪费;而当含有中文汉字时应使用nchar\nvarchar。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值