您好!欢迎访问家园网-www.jy.wang!

家园网

sql事务操作的变量只能声明为char、varchar、nchar、nvarchar数据类型。讲讲这4种类型都是啥啊

网络 作者:本站 点击:

SQL 中四种字符类型的区别

你提到的这四种类型确实是最基础的字符存储类型,但它们之间有一个核心区别:是否支持 Unicode(多语言) 和 是否固定长度

下面我直接用一个表格让你看清楚,然后分别解释。


一、总览对比表

类型

支持语言

长度方式

每个字符占用字节

适用场景

char

Unicode(英文/中文系统默认编码)

固定

1 字节 (ASCII) 或 2 字节 (GBK/中文)

长度固定、不含中文(如手机号、身份证号)

varchar

Unicode

可变

同上

长度不固定、不含中文(如英文文章、昵称)

nchar

Unicode(任何语言)

固定

2 字节(固定)

多语言环境、长度固定(如代码、GUID)

nvarchar

Unicode(任何语言)

可变

2 字节(固定)

多语言、长度不固定(如用户评论、地址)

二、分别解释

1. char(n) —— 固定长度非 Unicode

  • n 代表字符数量

  • 无论实际存多少,永远占满 n 个字符的空间

  • 不专门支持 Unicode(依赖数据库排序规则)

示例

sql

DECLARE @c CHAR(10)SET @c = 'abc'      -- 实际占用10个字符位

👉 适合:手机号、身份证号、固定代码


2. varchar(n) —— 可变长度非 Unicode

  • 只占用实际长度 + 1~2 字节额外开销

  • 不专门支持 Unicode

  • 比 char 节省空间

示例

sql

DECLARE @v VARCHAR(10)SET @v = 'abc'      -- 只占用 3 个字符 + 2 字节

👉 适合:英文文章、昵称、描述


3. nchar(n) —— 固定长度 Unicode

  • 每个字符固定占 2 字节

  • 支持任何语言(中文、英文、日文、韩文、特殊符号)

  • 长度固定

示例

sql

DECLARE @nc NCHAR(10)SET @nc = '你好'    -- 仍然占10个字符位(每个字符2字节)

👉 适合:多语言固定长度数据、GUID


4. nvarchar(n) —— 可变长度 Unicode

  • 每个字符固定占 2 字节

  • 只占用实际长度 + 额外开销

  • 支持所有语言

示例

sql

DECLARE @nv NVARCHAR(100)SET @nv = '你好'    -- 只占 2 个字符 + 2 字节

👉 适合:用户输入、评论、地址、产品名(任何可能有中文或特殊符号的地方)


三、一个重要问题:什么是“支持 Unicode”?

  • 不带 n(char / varchar):
    只能存数据库当前默认编码的语言(比如英文或中文,但不能同时存在)

  • 带 n(nchar / nvarchar):
    可以同时存中文、日文、韩文、英文、特殊符号 ✅

举例:

sql

-- ✅ 正常DECLARE @nv NVARCHAR(50) = '你好,世界 Hello 🌍'-- ⚠️ 可能乱码DECLARE @v VARCHAR(50) = '你好,世界 Hello 🌍'


四、你在事务变量里应该怎么选?

如果变量中可能包含...推荐类型
仅英文/数字(不含中文)varchar ✅
中文或任何多语言nvarchar ✅
长度固定(如身份证)char / nchar
长度不固定varchar / nvarchar

👉 现在绝大多数应用都推荐用 nvarchar,避免乱码问题。


五、存储空间对比(实际很重要)

存“你好”占用空间
char(10)20 字节
varchar(10)6 字节(2字符+2字节)
nchar(10)20 字节
nvarchar(10)6 字节

👉 可变长度(var)通常在真实业务中更节约空间。


六、一句话记忆口诀

不带 n 是本地语,带 n 是全球通;
char 固定占满位,var 变长更省空。

标签: