【sql server 数据库】彻底区分char、 nchar、 varchar、 nvarchar它们之间的关系以及什么时候该用

前言:

对于数据库中char、 nchar、 varchar、 nvarchar这四个类型之间很多人都能说个大概,但是细小的部分还是不够详细,或有些混淆!所以特来总结一下!

1、四者之间的区别:

首先明确一点,这四个类型 可以存储任何语言,不是说varchar,char只能英文,这个可以自己去数据库去实践。

在了解之前我们先简单的学习一下ANSI与Unciode,ANSI它的字符采用8bit,UNICODE采用的是16bit

对于字符来说ANSI以单字节存放英文字符,以双字节存放中文等字符,而Unicode下,英文和中文的字符都以双字节存放)
如果还是感觉抽象,那么看下面的图:M是一个英文字母 ,如果用ANSI存储那么它存储的空间为8bit,如果用Unicode那么它的存储空间是16位,同样是字母,Unicode就要比ANSI多用上一倍的空间!
在这里插入图片描述

但是如果是一个中文字符,那么ANSI就要用两个它原来的空间将它存下,而Unicode还是原来的一个空间就可以存下!

在这里插入图片描述

了解了ANSI与Unicode的区别接下来看四个类型的区别

char: 固定长度,存储ANSI字符,不足的补英文半角空格。

举个简单的例子 char(2) 表示的是两个字节,如果我要存储一个英文,那么它就会自己补一个空格,如果是一个汉字就不会补空格,一个空格就是8bit;

nchar: 固定长度,存储Unicode字符,不足的补英文半角空格

nchar(2)表示的是4个字节,它可以存两个英文或者两个汉字,或者其它的符号,文字,不足的补英文半角空格

varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。

varchar(2) 表示的是两个字节,如果我要存储一个英文,那么它就不会补空格,存储的空间就是8bit,如果存储一个文字,那么它的空间就是16bit,它的长度是可变的

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。

nvarchar(2) 表示的是4个字节,它可以存两个英文或者两个汉字,或者其它的符号,文字,不会补任何的空格

但是这里肯定会有人问,它们都可以存储各种语言,带n的nchar与nvarchar完全没用啊,还浪费空间,这里在说一个知识点,就是这个n表示的是unicode,它的意思就i是万国码,16位去表示一个字符,功能表示65535个字符,这样世界上所有的符号都可表示出来了,而ANSI只能去表示255个字符,它适用于英文,数字,或者其它的一些符号! 如果我们存储中文数据或者其它国家的一些语言的时候,我们用varchar存储有可能会出现乱码,但是用nchar与nvarchar就不会出现乱码,所以这就是nchar与nvarchar的作用!

2、总结一下:

如果你肯定存储的数据长度,而且不包中文的,可以用char类型。比如存储的字符只能yes和no的缩写Y和N;

如果肯定存储的数据长度,但可能包括中文,可以用nchar类型。比如存储的字符为性别:只能是男或者女

如果不确定存储的数据长度,存储只有英文、数字的最好用varchar ,比如:卡号、身份证号

如果不确定存储的数据长度,也有可能有中文,可以选择nvarchar类型 ,比如姓名,年级;

如果你做的项目可能涉及不同语言之间的转换,建议用nvarchar

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 74
    评论
Oracle、MySQLSQL Server是三种常见的关系数据库管理系统(RDBMS),它们在数据类型方面存在一些区别。以下是它们主要的数据类型及其区别: 1. 字符串类型: - Oracle:包括CHARVARCHAR2、NCHAR、NVARCHAR2等。 - MySQL:包括CHARVARCHAR、TINYTEXT、TEXT、LONGTEXT等。 - SQL Server:包括CHARVARCHAR、NCHAR、NVARCHAR、TEXT等。 2. 数值类型: - Oracle:包括NUMBER、INTEGER、FLOAT、DOUBLE PRECISION等。 - MySQL:包括INT、BIGINT、FLOAT、DOUBLE等。 - SQL Server:包括INT、BIGINT、FLOAT、REAL等。 3. 日期和时间类型: - Oracle:包括DATE、TIMESTAMP、INTERVAL等。 - MySQL:包括DATE、TIME、DATETIME等。 - SQL Server:包括DATE、TIME、DATETIME等。 4. 二进制类型: - Oracle:包括BLOB、RAW等。 - MySQL:包括BLOB、BINARY等。 - SQL Server:包括BLOB、BINARY等。 5. 布尔类型: - Oracle:不支持原生的布尔类型,可以使用NUMBER(1)或CHAR(1)来表示。 - MySQL:支持BOOL或BOOLEAN类型。 - SQL Server:不支持原生的布尔类型,可以使用BIT来表示。 6. 其他特殊类型: - Oracle:包括CLOB(大文本)、BFILE(二进制文件)等。 - MySQL:包括ENUM、SET等。 - SQL Server:包括XML、CURSOR等。 需要注意的是,尽管这些数据库有一些相同的数据类型,但在具体实现和功能上可能存在一些差异。此外,每个数据库还可能支持一些特定的扩展类型或自定义类型。 在选择数据库和设计表结构时,应该根据具体的应用需求和数据库的特性来选择合适的数据类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 74
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值