关于SQL SERVER 字段类型char(n) , nchar(n) , varchar(n) , nvarchar(n)
对于很多新手来说,经常被字段类型搞得晕头转向,今天我用通俗易懂的解释帮大家理解这些类型。
在数据库字段类型定义中,可以分为两大类,一类为Unicode类型,另一种就是非Unicode。
Unicode的编码方式与ISO10646的通用字元集(亦称[通用字符集])(Universal Character Set,UCS)概念相对应,
目前的用于实用的Unicode版本对应于UCS-2,使用16位的编码空间,也就是每个字符占用2个字节。
简单来说就是中文类型和非中文类型,个人喜欢把英文,数字,特殊符号定为非中文类型,其余的均定为中文类型。
想了解Unicode的可以去详细了解一下,这里不多做赘述,直接上干货:
char(n) , varchar(n) 表示按字节存储数据,nvarchar(n),nchar(n) 表示按字符存储数据。
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
列子:
“你好hello”
char占用空间:2*2+5=9个字节
nvarchar占用空间:7*2=14个字节

使用varchar存储含有非英文字符(比如中文,日文)时出现“??”的乱码,用nvarchar这则不会出现
可见,各有各的优点,那该怎么选择呢?
如果字段存储内容都是英文字符而没有汉字和其他语言符号,建议使用varchar,或char;
含有汉字的使用nvarchar,因为nvarchar是使用Unicode编码,即统一的字符编码标准,会减少乱码的出现几率;
个人一般建议,主键用char(char(10),和char(13)除外,卖个关子,自己去体会),
前提是你是自己编写的主键,带有英文字母和数字的混合字符串主键,如果是用int型自增主键则忽略
如果是英文类型字段,用varchar,如英文名,文件名/地址,用户名等
其他的字段,如描述,备注,说明等可采用nvarchar。
其他类型,SQL SERVER 类型参考表:
| 字段类型 | 描述 |
| bit | 0或1的整型数字 |
| int | 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 |
| smallint | 从-2^15(-32,768)到2^15(32,767)的整型数字 |
| tinyint | 从0到255的整型数字 |
| decimal | 从-10^38到10^38-1的定精度与有效位数的数字 |
| numeric | decimal的同义词 |
| money | 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 |
| smallmoney | 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 |
| float | 从-1.79E+308到1.79E+308可变精度的数字 |
| real | 从-3.04E+38到3.04E+38可变精度的数字 |
| datetime | 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 |
| smalldatetime | 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 |
| timestamp | 时间戳,一个数据库宽度的唯一数字 |
| uniqueidentifier | 全球唯一标识符GUID |
| char | 定长非Unicode的字符型数据,最大长度为8000 |
| varchar | 变长非Unicode的字符型数据,最大长度为8000 |
| text | 变长非Unicode的字符型数据,最大长度为2^31-1(2G) |
| nchar | 定长Unicode的字符型数据,最大长度为8000 |
| nvarchar | 变长Unicode的字符型数据,最大长度为8000 |
| ntext | 变长Unicode的字符型数据,最大长度为2^31-1(2G) |
| binary | 定长二进制数据,最大长度为8000 |
| varbinary | 变长二进制数据,最大长度为8000 |
| image | 变长二进制数据,最大长度为2^31-1(2G) |
今天的分享到此结束,有需要的可以关注留言讨论
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享SQL SERVER 相关知识
关于SQL SERVER 字段类型char(n) , nchar(n) , varchar(n) , nvarchar(n)的更多相关文章
- sql server数据库中char、nchar、varchar、nvarchar的选择
在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用. 在字符型数据中,用的最多的就是Char与Varchar两种类型.前面的是 ...
- SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理
原文:SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理 SQL Server 字段类型 decimal(18,6)小数点前是几位? 不可否认,这是 ...
- SQL中char、nchar、varchar、nvarchar、text概述【转】
1. char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. 2. nchar ...
- char和nchar,varchar和nvarchar的区别(转载)
1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度, ...
- char、nchar、varchar、nvarchar 的区别
char.varchar.nchar.nvarchar为数据库中常用的字符类型,使用上要综合考虑空间利用率与存取速度.它们的区别如下: 实例解析: 定义char[9].varchar[9].nchar ...
- sql 根据日期模糊查询&SQL Server dateTime类型 模糊查询
曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...
- SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别
原文地址 MS SQL大值数据类型varchar(max).nvarchar(max).varbinary(max) 在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max). ...
- SQL SERVER 数据有CHAR(10),CHAR(13),CHAR(9)隐藏字符
原文:SQL SERVER 数据有CHAR(10),CHAR(13),CHAR(9)隐藏字符 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Givi ...
- Oracle/SQL 修改字段类型和长度
标准SQL修改字段类型和长度语句: ALTER TABLE tableName modify column columnName 类型;例如Mysql的修改字段类型语句:alter table tes ...
- SQL Server锁类型
SQL Server锁类型(SQL)收藏 1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁. 2. NOLOCK:不添加共享锁和排它锁,当这个选项生 ...
随机推荐
- [Linux]常用命令之【netstat/ps/lsof/ss/kill/】#进程/服务/端口#
查看系统中最近的端口连接记录 [root@sdc01 ~]# lsof -Pnl +M -i4 | grep "154" sshd 30963 0 3u IPv4 65160732 ...
- day05-SpringCloud Eureka-服务注册与发现02
SpringCloud Eureka-服务注册与发现02 3.搭建EurekaServer集群-实现负载均衡&故障容错 3.1为什么需要集群EurekaServer? 微服务RPC远程服务调用 ...
- LeetCode 双周赛 101,DP/中心位贪心/裴蜀定理/Dijkstra/最小环
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈.上周末这场是 LeetCode 第 ...
- Clion+dap仿真器,移植stm32项目
如何将Keil项目移植到Clion,先看几位大佬的文章: 稚晖君的回答:配置CLion用于STM32开发[优雅の嵌入式开发] 野火论坛:DAP仿真器的使用教程 wuxx:nanoDAP使用疑难杂症解析 ...
- Hyperledger Fabric 使用 CouchDB 和复杂智能合约开发
前言 在上个实验中,我们已经实现了简单智能合约实现及客户端开发,但该实验中智能合约只有基础的增删改查功能,且其中的数据管理功能与传统 MySQL 比相差甚远.本文将在前面实验的基础上,将 Hyperl ...
- React redux toolkit: Uncaught Error:[Immer] An immer producer returned a new...
React在写一个购物车的redux toolkit时遇到了问题.核心代码如下: import { createSlice } from "@reduxjs/toolkit"; c ...
- 对dubbo的DubboReference.check的参数进行剖析
背景 在使用dubbo的时候,发现当消费者启动的时候,如果提供者没有启动,即使提供者后来启动了,消费者也调不通提供者提供的接口了. 注册中心使用都是nacos dubbo版本是3.0.4 例子 接口 ...
- flex:1的情况下,overflow:auto没有生效的问题
flex:1的元素的父元素必须保证高度或者宽度有具体的数值:如果父元素的高度或者宽度也是flex:1自适应的,最好在父元素上也设置overflow:auto,这样子元素的overflow:auto生效 ...
- [[SCOI2008]城堡] 解题报告
[SCOI2008]城堡 最大值最小,显然二分答案,但考虑二分后如何 check. \(n\) 个点 \(n\) 条边,显然这是一个基环树森林.对于基环树,常用的套路是拆环为链,枚举删去哪条边.但这题 ...
- 2022-05-19:给定一个数组arr,给定一个正数M, 如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对。 返回arr中M整除对的总数量。 来自微软。
2022-05-19:给定一个数组arr,给定一个正数M, 如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对. 返回arr中M整除对的总数量. 来自 ...