char、varchar、nchar、nvarchar的区别

2023-11-10

对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。

定长或变长

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;
有var前缀的,表示是实际存储空间是变长的,比如 varchar,nvarchar 变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

Unicode或非Unicode

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

基于以上两点,来看看字段容量
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字

使用(个人偏好)

如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
能确定长度又不一定是ansi字符或者,那么用nchar;
对于超大数据,如文章内容,使用nText
其他的通用nvarchar

char、varchar、nchar、nvarchar特点比较

  • CHAR
    CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

  • VARCHAR
    存储变长数据,但存储效率没有CHAR高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。
    从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

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

  • NCHAR、NVARCHAR、NTEXT
    这三种从名字上看比前面三种多了个"N"。和char、varchar比较起来,nchar、nvarchar最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
    所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

char、varchar、nchar、nvarchar的区别 的相关文章

  • sql server判断两个字符串是否相等(区分大小写)

    步骤 一 新增测试数据 新建测试表 create table testTable1 str1 varchar 100 str2 varchar 100 新增测试数据 如下图 二 两字符串进行比较 当直接使用 号进行判断时 是无法区分大小写的
  • row_number() over partition by 分组聚合

    row number over partition by 分组聚合 分组聚合 就是先分组再排序 可以的话顺手标个排名 如果不想分组也可以排名 如果不想分组同时再去重排名也可以 ROW NUMBER OVER PARTITION BY col
  • 利用Sql Server代理中的作业实现数据库的自动备份

    1 在Sql server代理中新建作业 2 填写作业名称 3 新建步骤 4 填写步骤名称 选择类型为T Sql脚本 在命令中输入操作脚本 以数据库databaseA 为例 脚本内容如下 DECLARE filename VARCHAR 2
  • 安装SQL Server2012报Microsoft.NET Framework4无法安装错误解决方案

    今天在安装SQL Server2012版本时 在最后出现 没有安装Microsoft NET Framework4 请安装这个继续安装SQLServer2012 于是就重官网下载Microsoft NET Framework4进行安装出现如
  • SQL server 安装问题

    安装sqlserver2008中遇到的一些问题和解决办法 安装过程中遇到restart computer 导致不能成功安装 解决办法 1 打开注册表编辑器 2 找到以下路径 HKEY LOCAL MACHINE SYSTEM Current
  • sql server 2000:不能打开到主机的连接,在端口1433:连接失败

    来源 http topic csdn net u 20081104 20 fd1f1e2b 9350 43a4 9892 34a98a709216 html http hi baidu com sinber blog item a12e8d
  • MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库 SQL语句 MySQL数据库 完整性约束 MySQL数据库备份与还原 MySQL数据库 编码 1 SQL概述 1 1 什么是SQL SQL Structured Query La
  • [SQL Server] TSQL实现SQL Server中CTE 递归查询

    参考博客 https www cnblogs com ljhdo p 4580347 html 简介 递归查询主要应用于层级结构表的查询 叶节点 gt 根节点的查询 根节点 gt 叶节点的查询 递归查询必须满足的条件 初始条件 递归查询至少
  • 使用SSIS创建同步数据库数据任务

    SSIS SQL Server Integration Services 是用于生成企业级数据集成和数据转换解决方案的平台 使用 Integration Services 可解决复杂的业务问题 具体表现为 复制或下载文件 发送电子邮件以响应
  • SQLServer导入导出excel及常见问题

    前几天考试系统导入导出学生信息 初次接触导入导出 为sqlserver和excel的数据传递方法之简和MS产品的高效兼容所震惊 但也遇到各种各样问题 在此介绍SQLServer导入导出excel方法及遇到的问题 SQLServer导出Exc
  • C++ QT连接SQL Server基操

    以下是一个使用C QT连接SQL Server的示例代码 include
  • Python安装数据库SqlServer\MySql访问组件

    首先要说明是基于Python3 6 3的 安装方法有所不同 以前网上说的一些方法试了基本没用 踩过了坑 现在列一下我的成功安装方法给坑友们 系统环境 win10企业版64位 开发环境 vs2015 Python版本 3 6 3 64位 一
  • 15款最好的Windows安全检测工具

    2006 05 09 13 29 Kevin Beaver TechTarget 你想测试你的Widnows系统的安全性吗 如果你选对了工具 其实这是一件非常有趣的工作 如果你正为挑选合适的工具而苦恼 那就让本文给你一些帮助吧 关于安全测试
  • 回答一位同学的来信

    由于个人隐私的原因 将这位同学的名字匿掉了 因为事先并未征求该同学的意见就将这封信贴了上来 如果该同学认为我侵犯了你的隐私请及时告知我 我会将这篇文章撤掉 之所以发表这篇文章是因为个人觉得它很有代表性 很有可能别的同学也正在为此事困扰着 希
  • SQL Server 变量

    变量的种类 在T SQL中 变量按照生存范围分为 局部变量和 全局变量 1 全局变量是由系统定义的 在整个SQL Server实例内都能访问到的变量 以 作为第一个字符 用户只能访问 不可以赋值 2 局部变量由用户定义 生命周期只在一个批处
  • SQLServer2019安装教程

    可以去官网下载 我百度网盘也有都一样 https pan baidu com s 1i3umqHXSUMbxJ9rRi6mU4A 提取码 5g9q 打开应用程序 点击安装 点第一个全新得SQL server独立安装 下一步 在这一步可能有需
  • 使用DataGrip连接SQL Server 2017数据库

    微软的SQL Server数据库是做 NET开发的好朋友 现在最新的版本是2017 SQL Server数据库有自己的Management Studio工具 基本用起来和Visual Studio差不多 当然除了官方的工具之外 其他的数据库
  • sql server 中的日期计算,如当天周的第一天,当前月的第一天

    根据给定的日期 计算该日期在本月所在周数 每周的第一天为周日 但是在月末需要与下个月进行衔接 如 图2012年2月份 3月份的1 2 3号为2月份的第4周 而2月份的1 2 3 4为1月份的最后一周 第五周 declare datetime
  • 为 SQL Server 站点数据库服务器配置 SPN

    如何为 SQL Server 站点数据库服务器配置 SPN 主题上次更新时间 2008 年 1 月 使用 SQL Server 计算机的本地系统帐户运行 SQL Server 服务不是 SQL Server 最佳方案 为了最安全地运行 SQ
  • SqlServer_更改数据类型

    SQL server修改数据类型 使用以下命令可以进行修改 Alter table monthly import demand alter column ImportWeight DECIMAL 18 4

随机推荐

  • OpenGL渲染结果发生了奇怪的拉伸和奇怪的彩条

    部分代码如下 Load create texture and generate mipmaps int width height unsigned char image SOIL load image 1 jpg width height
  • 【分享】docker引发的172.17.x.x网段无法访问

    前言 想搭建一个测试环境 折腾vmware虚拟机 发现公司的172 17网段怎么都访问不了 使用traceroute 发现 一直走172 17 0 1 无论是怎么更改配置 都是如此 查阅资料发现 当 Docker 启动时 会自动在主机上创建
  • jquery-migrate-1.2.1.min.js 作用

    在网上下载一些 js 插件使用的时候 经常出现这种情况 但是更换低版本 jquery 比如 使用 1 7 版本的 jquery 却不会报错 能正常使用 经过一番搜索 发现是因为高版本 1 9版本以后 不兼容以前的 需要引入一个 jquery
  • linux虚拟机安装后查不到IPV4地址的解决办法

    由于选择了桥接方式 网络配置设置不正确导致 编辑network配置文件 解决此问题 cd etc sysconfig network scripts vi enp0s3 若为做特殊修改 此名字是你打ifconfig查看显示的名字 改成如下配
  • AntDesign Pro安装过程

    详细资料请到官网查看文档 Ant Design Pro相关系列文章 一 AntDesign Pro安装过程 二 基于Ant DesignPro实现通过SpringBoot后台加载自定义菜单 前端部分 三 基于Ant DesignPro实现通
  • Excel数据过大,导出超时解决方案

    问题 随着业务量的增加 数据存储也越来越大 当我们从数据库读取数据生成excel时 往往会出现超时情况 尝试解决方案 考虑直接更改该请求的超时时长 但发现 随着数据增长 依然会出现超时情况 考虑采用多线程的方式 理论可以加快数据的读取效率
  • 二叉树17:路径总和

    主要是我自己刷题的一些记录过程 如果有错可以指出哦 大家一起进步 转载代码随想录 原文链接 代码随想录 leetcode链接 112 路径总和 112 路径总和 题目 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum
  • 【C进阶】深度剖析数据在内存中的存储

    目录 一 数据类型的介绍 1 类型的意义 2 类型的基本分类 二 整形在内存中的存储 1 原码 反码 补码 2 大小端介绍 3 练习 三 浮点型在内存中的存储 1 一个例子 2 浮点数存储规则 一 数据类型的介绍 前面我们已经学习了基本的内
  • 《kubernetes-1.8.0》20-examples-Deployments

    kubernetes 1 8 0 20 examples Deployments kubernetes 1 8 0 测试环境安装部署 时间 2017 12 19 一 基础知识 Deployment 为 Pod 和 ReplicaSet 提供
  • AI 机器学习实践总结

    机器学习基础 什么是机器学习 机器学习是一种从数据生成规则 发现模型 来帮助我们预测 判断 分组和解决问题的技术 机器学习是一种从数据中生产函数 而不是程序员直接编写函数的技术 说起函数就涉及到自变量和因变量 在机器学习中 把自变量叫做特征
  • 力扣(LeetCode)算法_C++——存在重复元素 II

    存在重复元素 II 给你一个整数数组 nums 和一个整数 k 判断数组中是否存在两个 不同的索引 i 和 j 满足 nums i nums j 且 abs i j lt k 如果存在 返回 true 否则 返回 false 示例 1 输入
  • 程序员的自我修养--链接、装载与库笔记:Linux共享库的组织

    共享库 Shared Library 概念 其实从文件结构上来讲 共享库和共享对象没什么区别 Linux下的共享库就是普通的ELF共享对象 由于共享对象可以被各个程序之间共享 所以它也就成为了库的很好的存在形式 很多库的开发者都以共享对象的
  • tensorflow学习笔记二:入门基础

    基本概念 使用TensorFlow前必须明白的基本概念 图 Graph 图描述了计算的过程 TensorFlow使用图来表示计算任务 张量 Tensor TensorFlow使用tensor表示数据 每个Tensor是一个类型化的多维数组
  • java---日期类汇总

    java中常用的日期类有Date SimpleDateFormat Calendar这三种 现在分别对三个类的日常使用进行大概的总结 1 Date类 1 1 基本介绍 一般常用的事Java util Date包下的Date类 在java s
  • 11月7日 Unreal Engine Rider 学习笔记

    创建蓝图接口 添加蓝图Class 添加接口用指针 添加宝箱Actor类 添加Mesh类 首先在类后面添加一个公用接口声明 class ACTIONROUGELIKE API AASItemChest public AActor public
  • 华为OD机试 - 食堂供餐(Java)

    题目描述 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少价盒饭才能满足要求
  • httpclient下载文件

    private static CloseableHttpClient client static PoolingHttpClientConnectionManager connectionManager new PoolingHttpCli
  • 抓httpclient发送的http请求包

    1 使用fiddler或者Charles抓不到httpclient发送的http请求包 2 需要使用以下代码 HttpHost proxy new HttpHost 127 0 0 1 8888 http 127 0 0 1 8888地址为
  • 大数据:HDFS的Shell常用命令操作

    文章目录 一 HDFS的Shell介绍 二 HDFS常用命令操作 01 创建目录 1 创建单层目录 3 创建多层目录 02 查看目录 03 上传本地文件到HDFS 04 查看文件内容 05 下载HDFS文件到本地 06 删除HDFS文件 0
  • char、varchar、nchar、nvarchar的区别

    对于程序中的string型字段 SQLServer中有char varchar nchar nvarchar四种类型来对应 暂时不考虑text和ntext 开建立数据库中 对这四种类型往往比较模糊 这里做一下对比 定长或变长 所谓定长就是长