Char,varchar,nvarchar字段是sql server数据库中的三种字段类型。好多人在选择存储的时候不知道如何抉择,我给大家讲下这个三个字段类型的区别。 Char(n)是长度为n个字节的定长的非unicode的字符数据。N为一个介于1到8000之间的值。其存储大小为输入数据的实际字节长度,而不是n个字节。如果你输入的实际字节长度少于n,那么其他位置会被空格填充。在数据存储中英文字母和数字占一个字节,汉字占两个字节。那么char(n)最多可以存储n个英文字母或数字,或者n/2个汉字。 Varchar(n)是长度为n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于1 和8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。注意它和char(n)的区别是char(n)是定长的,varchar(n)是变长的。

如果你输入的字符的实际字节长度少于n,那么它的长度就是你实际输入的字节长度。在数据存储中英文字母和数字占一个字节,汉字占两个字节。Varchar(n)最多可以存储n个英文字母或数字,或者n/2个汉字。 Nvarchar(n) 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍. 在数据存储中英文字母,数字,汉字都是占两个字节。Char(n)最多可以存储n个英文字母或数字,或者n个汉字。

在数据检索中,一般来说char型字段的数据是最快的,varchar,nvarchar型字段其次。 在所存数据长度不一的情况下,varcahr型字段所占空间最少,char,nvarchar其次。 那么到底在什么样的情况下使用什么样的数据类型那? 如果你所存数据长度基本一致,建议使用char型。这样检索速度快,但是提取的时候要注意用trim()函数剔除所存数据两边的空格。 如果你所存数据长度差异较大,可以使用varchar或者nvarchar。如果你想较好的支持多语言的话,最好使用nvarchar。使用nvarchar可以减少字符转换问题,防止某些情况下乱码的出现。

说了这么多,大家可能都晕了。列个表供大家参考。 Char(n) Varchar(n) Nvarchar(n) N 最大值 8000 8000 4000 数据长度固定(不足用空格填充)可变(实际数据长度)可变(实际数据长度)可存储最多英文(数字) 8000 8000 4000 最多汉字数 4000 4000 4000 英文(数字)所占字节 1 1 2 汉字所占字节 2 2 2 检索速度快慢慢在去年的一个网站项目中,我使用了sql server数据库,数据库排序规则为Chinese_PRC_CI_AS.其中部分字段使用varchar型。

我在本机浏览数据库中数据正常,页面数据显示正常。但是当我将数据库导入到服务器以后,在客户端发现页面从数据库中读取的数据显示全是乱码。我通过查询分析器连接到服务器,发现数据库中的汉字也全变成了乱码。 我估计服务器端sql server为英文版,于是将服务器数据库中varchar型字段都改为nvarchar型,乱码问题解决。但是同时我又发现一个奇怪的现象。

比如数据库中有两个记录。 表名: ComputerInfo Computer computerType 成都家具厂 私营 合肥家具厂 私营 其中Computer字段为nvarchar型。我用 select * from ComputerInfo where Computer like ‘%成都%’ 返回的记录数总是0.奇怪了,明明数据库中有数据的嘛。我查阅了大量的资料以后,终于解决了问题。只需要把查询语句改为select * from ComputerInfo where Computer like N‘%成都%’ 即可。在字符前加N表示将其转化为unicode字符。

sql server数据库中char,varchar,nvarchar字段的区别的更多相关文章

  1. sql server数据库中char、nchar、varchar、nvarchar的选择

    在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用. 在字符型数据中,用的最多的就是Char与Varchar两种类型.前面的是 ...

  2. 数据库中char, varchar, nvarchar的差异

    char     char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.    nvarc ...

  3. Oracle数据库中char, varchar, nvarchar的差异

    1. char      固定长度,最长n个字符.   2. varchar      最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同)   char和varchar区别:   ...

  4. sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度

    smallint  是一种精确的数值数据类型,其精度在算术运算后不变,采用2个字节编码 有符号的 smallint 值的范围是 -2^15-------2^15 -1,即 -32768 ----327 ...

  5. 获取SQL Server数据库中的表和字段描述

    获取所有dbo表的扩展属性: SELECT * FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', default, NULL, ...

  6. 如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

    1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打 ...

  7. SQL Server 数据库中的几个常见的临界值

    本文出处:http://www.cnblogs.com/wy123/p/6709520.html 1,SQL语句或者存储过程的最大长度(SQL字符串容量)是多少? 经常有人问,我的SQL语句是拼凑出来 ...

  8. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  9. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

    C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...

随机推荐

  1. ubuntu查询命令行安装的软件的安装路径

    which git // 查询git的安装路径

  2. 结构之美——优先队列基本结构(四)——二叉堆、d堆、左式堆、斜堆

    实现优先队列结构主要是通过堆完成,主要有:二叉堆.d堆.左式堆.斜堆.二项堆.斐波那契堆.pairing 堆等. 1. 二叉堆 1.1. 定义 完全二叉树,根最小. 存储时使用层序. 1.2. 操作 ...

  3. CCF认证201803-1 跳一跳

    import java.util.Scanner; public class Jump { public static void main(String[] args) { Scanner sc = ...

  4. Java 8-lambda表达式及方法引用

    Lambda表达式 Lambda表达式是一个类似于匿名函数的语法糖,它实现一个函数式接口,它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理. 一个 Lambda 表达式可以有零个或多 ...

  5. kafka restful api功能介绍与使用

    前述 采用confluent kafka-rest proxy实现kafka restful service时候(具体参考上一篇笔记),通过http协议数据传输,需要注意的是采用了base64编码(或 ...

  6. Win 10安装11g 客户端条件检查失败,INS-30131 无法从节点 "desktop-njm3a7m" 检索 exectask 的版本

    Win 10安装11g 客户端条件检查失败,[INS-30131] 执行安装程序验证所需的初始设置失败.无法从节点 "desktop-njm3a7m" 检索 exectask 的版 ...

  7. 梯度下降法&牛顿法

    梯度下降法 在机器学习任务中,需要最小化损失函数\(L(\theta)\),其中\(\theta\)是要求解的模型参数.梯度下降法是一种迭代方法,用到损失函数的一阶泰勒展开.选取初值\(\theta ...

  8. iOS:位置相关(18-03-09更)

    1.定位设置 2.定位页面逻辑 1.定位设置 2.定位页面逻辑 1).第一次进入该VC,在 viewDidLoad 调用刷新页面 refreshLocationView .这时用户还没决定,会刷出“正 ...

  9. 【学时总结】 ◆学时 · I◆ A*算法

    [学时·I]A*算法 ■基本策略■ --A*(A Star)无非就是BFS的升级,当BFS都超时的时候-- 同样以队列为基础结构,BFS使用FIFO队列(queue),而A*则使用优先队列(prior ...

  10. VS Code 的常用快捷键及插件(前端)

    一.vs code 的常用快捷键 1.注释: a) 单行注释:[ctrl+k,ctrl+c] 或 ctrl+/ b) 取消单行注释:[ctrl+k,ctrl+u] (按下ctrl不放,再按k + u) ...