Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL Server中char、nchar、varchar、nvarchar的区别

SQL Server中char、nchar、varchar、nvarchar的区别

作者头像
用户7353950
发布于 2022-06-23 08:10:11
发布于 2022-06-23 08:10:11
1.8K00
代码可运行
举报
文章被收录于专栏:IT技术订阅IT技术订阅
运行总次数:0
代码可运行

对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。

1.定长或变长

所谓定长就是长度固定,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度;有var前缀的,表示是实际存储空间是动态变化的,比如varchar,nvarchar变长字符数据则不会以空格填充。

2.Unicode或非Unicode

数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。

3.几种数据类型的存储的最大容量

char,varchar 最多8000个英文,4000个汉字

nchar,nvarchar 最多可存储4000个字符,无论英文还是汉字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--创建表
CREATE TABLE TempTable(
    id INT PRIMARY KEY,
    charField CHAR(10),
    varcharField VARCHAR(10),
    nvarcharField NVARCHAR(10)
)
 
INSERT INTO TempTable VALUES(1,'WFTH','WFTH','WFTH')
INSERT INTO TempTable VALUES(2,'无风听海','无风听海','无风听海')
INSERT INTO TempTable VALUES(3,'','','')
INSERT INTO TempTable(id) VALUES(4)
INSERT INTO TempTable VALUES(5,'1234567890','1234567890',
'12345')
 
SELECT DATALENGTH(charField) AS charFieldLen,
       DATALENGTH(varcharField) AS varcharFieldLen,
       DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =1
 
SELECT DATALENGTH(charField) AS charFieldLen,
       DATALENGTH(varcharField) AS varcharFieldLen,
       DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =2
 
SELECT DATALENGTH(charField) AS charFieldLen,
       DATALENGTH(varcharField) AS varcharFieldLen,
       DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =3
 
SELECT DATALENGTH(charField) AS charFieldLen,
       DATALENGTH(varcharField) AS varcharFieldLen,
       DATALENGTH(nvarcharField) AS nvarcharFieldLen
FROM temptable WHERE id =4
 
SELECT DATALENGTH(charField) AS charFieldLen,charField,
       DATALENGTH(varcharField) AS varcharFieldLen,varcharField,
       DATALENGTH(nvarcharField) AS nvarcharFieldLen,nvarcharField
FROM temptable WHERE id =5
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文读懂数据库的文本数据类型:CHAR,VARCHAR,TEXT,BLOG,NCHAR、NVARCHAR、NTEXT
CHAR 用于存储固定长度的数据,CHAR字段上的索引效率级高,但是不适用于字符长度不确定的数据。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
白墨石
2021/01/13
3.7K0
SQLServer中char、varchar、nchar、nvarchar的区别:
nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
孙晨c
2019/09/05
6.9K0
SQLServer中char、varchar、nchar、nvarchar的区别:
数据库中char varchar nchar nvarchar的区别
我们在进行数据库的设计的时候,很多情况下表中的字段都是用的是字符串类型的数据,其中就有四种选择char varchar nchar nvarchar,我们该如何进行?
瑞新
2020/07/08
8510
数据库 — char、varchar、varchar2区别
char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。
全栈程序员站长
2022/09/06
9100
nchar,char,varchar与nvarchar区别「建议收藏」
今天建合作用的数据库,发现每个字段默认的类型为nchar(10),以前我们经常接触的也就是char和varchar,那前面加了n之后会有什么不同呢?
全栈程序员站长
2022/08/09
1.4K0
MySQL中char、varchar和text的区别
1.char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。 2.varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。 3.text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。
周小董
2019/03/25
2.2K0
varchar2和varchar2(char)_datetime数据类型
大家好,又见面了,我是你们的朋友全栈君。char varchar varchar2 的区别 区别: 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc”,对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 2.CHAR的效率比VARCHAR2的效率稍高。 3. 目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
全栈程序员站长
2022/08/03
9110
sql serve中的数据类型(详解)
数据可存储范围: 可以存储-2^31 ~ 2^31-1之间所有的 正负整数, 占用空间: 4个字节(每个int类型数据).
初阶牛
2022/12/06
3.6K0
sql serve中的数据类型(详解)
Oracle存储生僻字乱码问题
1、若Oracle数据库字符集为ZHS16GBK,则必须同时满足如下2个条件,才能避免生僻字乱码:
AiDBA宝典
2023/04/27
3.2K0
Oracle存储生僻字乱码问题
SQL Server常见数据类型介绍
数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅。 整数类型 int  存储范围是-2,147,483,648到2,147,483,647之间的整数,主键列常设置此类型。 (每个数值占用 4字节) smallint  存储范围是-32,768 到 32,767 之间的整数,用来存储限定在特定数值范围内的数据。 (每个数值占用 2 字节) tinyint  存储范围是0到255 之间的整
Esofar
2018/09/05
6650
char varchar nchar nvarcharar到底有多大区别
首先说明下,ASP.NET MVC系列还在龟速翻译中。 工作好多年,基础知识甚是薄弱,决定以后在coding(cv操作)的时候尽量多google下,然后总结下来,目的有三:     1. 加深自己的理解,如果园看懂了并且没有误导人,那么我就理解对了。     2. 以备自己遇到问题之后还要google,直接看看自己的就好了。     3. 也许面试前的突击能用到,不用东找西看 下面言归正传,介绍下char、varchar、nchar、nvarcharar到底有什么区别,免得每次创建新表的时候,总是在模仿别
数据分析
2018/03/01
8800
varchar和nvarchar区别
Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表
西柚dzh
2022/06/09
5510
Oracle字符与字节的整理
平时工作中,偶尔会有关于Oracle字符与字节的困惑,今天闲暇之余,特意整理一下。
星哥玩云
2022/08/18
1.2K0
Oracle字符与字节的整理
nvarchar,nchar,vchar,nvchar,char…
nvarchar,nchar,vchar,nvchar,char,ntext,text区别详解 联机帮助上的:
恋喵大鲤鱼
2018/08/03
1.1K0
MySQL之char、varchar类型简析
我们都知道,MySQL中关于字符,有char和varchar两种常用的类型,可能在平时的使用过程中,大家不会去关心这两种类型的区别,只是会用就可以了,或者说看到过一些它们的区别,但是没有时间去测试,今天有时间了,我将这两种类型的具体情况实验一把,让大家直观感受下,纯属分享,大神请绕道。
AsiaYe
2019/11/06
3.1K0
MySQL之char、varchar类型简析
sqlite 数据类型
一般数据采用固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。
阳光岛主
2019/02/19
2.6K0
细说varchar与char有哪些区别?
  VARCHAR类型用于存储可变长度字符串,是最常见的字符串数据类型。它比固定长度类型更节省空间,因为它仅使用必要的空间(根据实际字符串的长度改变存储空间)。   有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储。
陈哈哈
2021/10/13
1.7K0
【YashanDB知识库】oracle dblink varchar类型查询报错记录
myodbc-installer -d -a -n "MySQL8.0" -t "DRIVER=/home/oracle/tools/mysql-connector-odbc-8.0.20/lib/libmyodbc8w.so;SETUP=/home/oracle/tools/mysql-connector-odbc-8.0.20/lib/myodbc8S.so"
用户10349277
2025/02/20
2320
数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库。其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server)。这个处理的程序是老大用python写的,处理完后进
SpringSun
2020/08/11
2.4K0
数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
[MySQL]varchar和char的的区别是什么
如果存进去的是‘tao’,那么char所占的长度依然为3,除了字符‘tao’外,后面跟7个空格,varchar就立马把长度变为3了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。
唯一Chat
2021/02/25
7.5K1
相关推荐
一文读懂数据库的文本数据类型:CHAR,VARCHAR,TEXT,BLOG,NCHAR、NVARCHAR、NTEXT
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验