char、nchar、varchar、nvarchar、text、ntext的区别
char、nchar、varchar、nvarchar、text、ntext的区别
char、nchar、varchar、nvarchar、text、ntext的区别一、char、nchar、varchar、nvarchar、text、ntext 类型说明
1、CHAR
CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。
2、VARCHAR
存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
3、TEXT
text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
4、NCHAR、NVARCHAR、NTEXT
这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar
二、char、nchar、varchar、nvarchar、text、ntext的区别
1、nvarchar和varchar的区别
nvarchar和varchar的区别是存储方式不同varchar是按字节存储的.而带"n"的nvarchar是按字符存储的,比如说varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符.nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的.
2、char与varchar的区别
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。
3、 text与ntext的区别同varchar和nvarchar
三、使用以上数据库类型需要注意的地方
1、当使用非unicode时慎用以下这种查询
select f from t where f = N'xx'
原因:无法利用到索引,因为数据库会将f先转换到unicode再和N'xx'比较
2、char 和相同长度的varchar处理速度差不多
3、varchar的长度不会影响处理速度
4、索引中列总长度最多支持总为900字节,所以长度大于900的varchar、char和大于450的nvarchar,nchar将无法创建索引
5、text、ntext上是无法创建索引的
6、O/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性来说,可变长度的类型更加吻合
7、一般基础资料表中的name在实际查询中基本上全部是使用like '%xx%'这种方式,而这种方式是无法利用索引的,所以如果对于此种字段,索引建了也白建
8、其它一些像remark的字段则是根本不需要查询的,所以不需要索引
9、varchar的存放和string是一样原理的,即length {block}这种方式,所以varchar的长度和它实际占用空间是无关的
10、对于固定长度的字段,是需要额外空间来存放NULL标识的,所以如果一个char字段中出现非常多的NULL,那么很不幸,你的占用空间比没有NULL的大(但这个大并不是大太多,因为NULL标识是用bit存放的,可是如果你一行中只有你一个NULL需要标识,那么你就白白浪费1byte空间了,罪过罪过!),这时候,你可以使用特殊标识来存放,如:'NV'
11、同上,所以对于这种NULL查询,索引是无法生效的,假如你使用了NULL标识替代的话,那么恭喜你,你可以利用到索引了
12、char和varchar的比较成本是一样的,现在关键就看它们的索引查找的成本了,因为查找策略都一样,因此应该比较谁占用空间小。在存放相同数量的字符情况下,如果数量小,那么char占用长度是小于varchar的,但如果数量稍大,则varchar完全可能小于char,而且要看实际填充数值的充实度,比如说varchar(3)和char(3),那么理论上应该是char快了,但如果是char(10)和varchar(10),充实度只有30%的情况下,理论上就应该是varchar快了。因为varchar需要额外空间存放块长度,所以只要length(1-fillfactor)大于这个存放空间(好像是2字节),那么它就会比相同长度的char快了。
13、nvarchar比varchar要慢上一些,而且对于非unicode字符它会占用双倍的空间,那么这么一种类型推出来是为什么呢?对,就是为了国际化,对于unicode类型的数据,排序规则对它们是不起作用的,而非unicode字符在处理不同语言的数据时,必须指定排序规则才能正常工作,所以n类型就这么一点好处。
- SQL charindex怎么用
- pycharm导入turtle出现错误(解决Pycharm调用Turtle时 窗口一闪而过的问题)
- pycharm如何自定义模板(对Pycharm创建py文件时自定义头部模板的方法详解)
- 微信小程序静态页面详情(微信小程序基础教程之echart的使用)
- mysqltext与varchar区别(MySQL CHAR和VARCHAR该如何选择)
- vue使用echarts教程(Vue使用echarts可视化组件的方法)
- springbootvue数据交互系统(Springboot运用vue+echarts前后端交互实现动态圆环图)
- echarts柱状图颜色设置(Echarts基本入门之柱状图、折线图通用配置)
- SQL Server中使用order by charindex按指定顺序排序
- python创建一个xls文件(Python XlsxWriter模块Chart类用法实例分析)
- tomcat运行警告(tomcat异常解决Invalid character found in the request target. The valid characters are defined in)
- mysql主键为什么用varchar(Mysql中varchar类型一些需要注意的地方)
- echarts 高级图表教程(Echarts图例组件的属性与源代码)
- char、nchar、varchar、nvarchar、text、ntext的区别
- 使用HighCharts制作图表
- php内置加密函数(php过滤htmlspecialchars 函数实现把预定义的字符转换为 HTML 实体用法分析)
- 入秋后的第二场苹果发布会来了 全新M1系列芯片登场(入秋后的第二场苹果发布会来了)
- 苹果正式发布自研芯片M1 5nm 32核心 彻底放弃Intel(苹果正式发布自研芯片M1)
- 苹果自研芯片跑分对比 A16芯片排名靠后,M1系列霸榜(苹果自研芯片跑分对比)
- X86处理器的梦魇 苹果M1自研芯片到底有多强(苹果M1自研芯片到底有多强)
- 泰剧《爱欲之神》Boom kitkong和Great合体杂志(泰剧爱欲之神Boomkitkong和Great合体杂志)
- 素人恋爱综艺火药味十足 男生为赢得芳心集体扯头花,真是出好戏(素人恋爱综艺火药味十足)
热门推荐
- 阿里云服务器端口和ip(阿里云服务器如何添加安全通信端口?)
- php逐行读写文件(PHP实现读取文件夹及批量重命名文件操作示例)
- 云服务器好在哪你知道吗(美国云服务器怎么选择?美国云服务器选择技巧分享)
- vmware能安装macos吗(VMware15/16解锁VMware安装MacOS的步骤详解)
- linux看系统内存大小(Linux体检,了解你的Linux状态网络IO,磁盘,CPU,内存)
- jQuery toggleClass
- sql datalength与len区别
- asp.net将ppt文档转换成pdf
- gitlablinux安装配置(Ubuntu20.04安装配置GitLab的方法步骤)
- python列表生成怎么用(详解python列表生成式和列表生成式器区别)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9