char varchar varchar2 nchar nvarchar nvarchar2的区别及分别在什么情况下适用

char varchar varchar2 nchar nvarchar nvarchar2的区别及分别在什么情况下适用,第1张

这样,分oracle外,非orcacle的。

若是前者,则只讨论char,varchar:

char,varchar 最多8000个英文,4000个汉字 ,

nchar,nvarchar 可存储4000个字符,无论英文还是汉字

以下是一些扩展;

一 、 nchar和nvarchar

nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度Unicode数据的数据类型,二者均使用 UNICODE UCS-2 字符集。

nchar(n)

包含n个字符的固定长度Unicode字符数据。n 的值必须介于1与4,000之间。存储大小为n 字节的两倍。nchar在SQL-92 中的同义词为national char 和national character。

nvarchar(n)

包含n 个字符的可变长度 Unicode 字符数据。n 的值必须介于1与4,000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar在SQL-92 中的同义词为 national char varying和national character varying。

注释

如果没有在数据定义或变量声明语句中指定 n,则默认长度为1。如果没有使用CAST函数指定n,则默认长度为30。

如果希望列中所有数据项的大小接近一致,则使用nchar。

如果希望列中数据项的大小差异很大,则使用nvarchar。

使用nchar或nvarchar的对象被赋予数据库的默认排序规则,除非使用COLLATE 子句赋予特定的排序规则。

SET ANSI_PADDING OFF不适用于nchar 或nvarchar。SET ANSI_PADDING ON永远适用于nchar 和 nvarchar。

二、char 和 varchar

固定长度(char)或可变长度 (varchar) 字符数据类型。

char[(n)]

长度为 n 个字节的固定长度且非Unicode的字符数据。n必须是一个介于1和 8,000之间的数值。存储大小为 n 个字节。char 在SQL-92中的同义词为character。

varchar[(n)]

长度为 n个字节的可变长度且非 Unicode 的字符数据。n必须是一个介于1 和8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar在SQL-92中的同义词为char varying 或 character varying。

注释

如果没有在数据定义或变量声明语句中指定n,则默认长度为1。如果没有使用 CAST函数指定n,则默认长度为 30。

将为使用char 或 varchar 的对象被指派数据库的默认排序规则,除非用COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

支持多语言的站点应考虑使用Unicode nchar 或nvarchar数据类型以尽量减少字符转换问题。

如果希望列中的数据值大小接近一致,请使用char。

如果希望列中的数据值大小显著不同,请使用varchar。

如果执行CREATE TABLE 或 ALTER TABLE 时SET ANSI_PADDING 为OFF,则一个定义为NULL的 char 列将被作为 varchar 处理。

当排序规则代码页使用双字节字符时,存储大小仍然为n个字节。根据字符串的不同,n个字节的存储大小可能小于n 个字符。

总结:

1、 varchar:

可变长度的非 Unicode 数据,最长为 8,000 个字符。

2、nvarchar:

可变长度 Unicode 数据,其最大长度为 4,000 字符。

3、char:

固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

4、nchar

固定长度的 Unicode 数据,最大长度为 4,000 个字符。

5、char和varchar都是字符串类型的

用Unicode编码的字符串,结果是字符的整数值

具考证:在字符长度一定时CHAR的性能比VARCHAR好,而在长度不确定时,CHAR类型的字段在使用时性能略差。这个在sqlServer数据库下面能够体现,并且这个字段是经常使用的。

区别:

1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比 varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!

2.CHAR的效率比VARCHAR的效率稍高。

3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

何时该用CHAR,何时该用varchar2?

CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系

VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。

VARCHAR2 虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

一般地说,只要一个表有一个字段定义为varchar(n)类型,那么其余用char(n)定义的字段实际上也是varchar(n)类型。

如果你的长度本身不长,比如就3~10个字符,那么使用char(n)格式效率比较高,搜索速度快。但是如果有的数据很长,有的数据有比较短,比如注册用户的简介这样的字段,实在没有办法,而且很在乎浪费的空间,那么就用varchar(n)格式。

基于以上两点来看看字段容量

char,varchar 最多8000个英文,4000个汉字

nchar,nvarchar 可存储4000个字符,无论英文还是汉字

1 阅读程序,说明它们的功能

use master

go

create database jxgl on (name=jxgldata1,filename=’c:\jxgl_datamdf’, Size=5mb,maxsize=100mb,filegrowth=5mb)

go

创建一个名字为 jxgl 的数据库,数据文件存储在 c:\jxgl_datamdf

文件初始的大小为5mb

随着数据量的增加,如果文件空间不足了,会自动增长,每次增长的幅度为5MB

最大增长到 100MB

2 阅读程序,说明它们的功能

use jxgl

go

select from student

检索 jxgl 数据库下面的 student 表的 所有数据。

3 阅读程序,说明它们的功能

use jxgl

go

select sno,avg(grade) from sc group by sno

检索 jxgl 数据库下面的 sc 表

按 sno 分组,求 grade 的平均值

4 阅读程序,说明它们的功能

use library

go

update readcatgory set 借书数量=15,借书期限=借书期限+5 where 种类名称=‘一类读者’

go

更新 library 数据库下面的 readcatgory 表

将所有 种类名称 为 一类读者 的数据, 将 借书数量 更新为 15, 借书期限 在原有的基础上,增加5。

5 阅读程序,说明它们的功能

use library

go

select 出版社,count(出版社) as 图书数量 from books group by 出版社 having count(出版社)>10

go

检索 library 数据库下的 books 表

按出版社分组, 查询每个出版社的出版的图书总数量

如果这个出版社出版的图书总数量在10本以下(含10本),那么不显示。

六、设计题。(共20分)

现有关系数据库如下:

数据库名:学籍管理数据库

学生表(学号 char(6),姓名 char(8),性别 char(2),出生日期 datetime)

课程表(课程编号 char(2),课程名称 char(20),任课教师 char(10))

选课表(学号 char(6),课程编号 char(2),成绩 tinyint)

用SQL语言实现下列功能的sql语句代码:

1 创建数据表“选课表”代码。(4分)

选课表(学号 char(6),课程编号 char(2),成绩 tinyint)

要求使用:外键(学号),非空(学号、课程编号)。-------(提示词:foreign key,references)

CRETAE TABLE 选课表 (

学号 char(6) NOT NULL,

课程编号 char(2) NOT NULL,

成绩 tinyint,

FOREIGN KEY (学号) REFERENCES 学生表,

FOREIGN KEY (课程编号) REFERENCES 课程表

);

2 从选课表中查询每位学生选课的最高分、最低分、平均分。(4分)

要求:分别使用函数max(),min(),avg()。

SELECT

学号,

MAX(成绩) AS 最高分,

MAX(成绩) AS 最低分,

MAX(成绩) AS 平均分

FROM

选课表

GROUP BY

学号

3 创建视图“学生选课信息视图”代码。(4分)

学生选课信息视图(姓名, 课程编号, 成绩)

CREATE VIEW 学生选课信息视图

AS

SELECT

学生表姓名,

选课表课程编号,

选课表成绩

FROM

学生表 JOIN 选课表 ON (学生表学号 = 选课表学号)

4 请用联接查询实现查询选修过“李明”老师讲授课程的所有学生姓名(4分)

SELECT

学生表姓名

FROM

课程表, 选课表, 学生表

WHERE

学生表学号 = 选课表学号

AND 课程表课程编号 = 选课表课程编号

AND 课程表任课教师 = '李明'

5 请用嵌套查询实现查询选修过“李明”老师讲授课程的所有学生姓名(4分)

SELECT

学生表姓名

FROM

学生表

WHERE

学生表学号 IN

( SELECT

学号

FROM

选课表

WHERE

课程编号 IN

(

SELECT

课程编号

FROM

课程表

WHERE

任课教师 = '李明'

)

)

1、处理速度

char 和相同长度的varchar处理速度差不多。varchar的长度不会影响处理速度;

2、string

O/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性来说,可变长度的类型更加吻合;varchar的存放和string是一样原理的,即length {block}这种方式,所以varchar的长度和它实际占用空间是无关的;

3、查询成本

char和varchar的比较成本是一样的,现在关键就看它们的索引查找的成本了,因为查找策略都一样,因此应该比较谁占用空间小。

例:

在存放相同数量的字符情况下,如果数量小,那么char占用长度是小于varchar的,但如果数量稍大,则varchar完全可能小于char,而且要看实际填充数值的充实度,比如说varchar(3)和char(3),那么理论上应该是char快了,但如果是char(10)和varchar(10),充实度只有30%的情况下,理论上就应该是varchar快了。

因为varchar需要额外空间存放块长度,所以只要length(1-fillfactor)大于这个存放空间(好像是2字节),那么它就会比相同长度的char快了。

扩展资料:

1、如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char;

2、能确定长度又不一定是ansi字符或者,那么用nchar;

3、不确定长度,要查询且希望利用索引的话,用nvarchar类型吧,将它们设到400;

4、不查询的话没什么好说的,用nvarchar(4000);

5、性格豪爽的可以只用3和4,偶尔用用1,毕竟这是一种额外说明,等于告诉别人说,我一定需要长度为X位的数据。

SQL语言创建数据库和学生表

建立:

[sql]

createdatabasezxl

createtable学生表

(

学号char(12)primarykey,

姓名char(6)notnull,

性别char(2)check(性别IN('男','女')),

班级char(15)

)

createtable成绩表

(

学号char(12)references学生表(学号),

课程号char(2)references课程表(课程号),

成绩intdefault(30),

primarykey(学号,课程号)

)

createtable课程表

(

课程号char(2)primarykey,

课程名char(20),

学分intcheck(学分>=1and学分

)

*** 作:

[sql]

insertinto学生表values('','张xl','男','文专计1111')

insertinto学生表values('','张','女','文专计1111')

insertinto成绩表values('','01',100)

insertinto成绩表values('','02',99)

insertinto成绩表values('','03',88)

insertinto课程表values('01','数据库系统',3)

insertinto课程表values('02','vbnet',4)

insertinto课程表values('03','java',4)

selectfrom成绩表

select姓名,课程名,成绩

from学生表,课程表,成绩表

where(学生表学号=成绩表学号and课程表课程号=成绩表课程号)

orderby成绩desc

selectavg(成绩)平均分,max(成绩)最高分,min(成绩)最低分

from成绩表

where学号='

创建一个名为教学管理的数据库创建学生表要求定义主码

一、简答

1、DBA的职责是什么?

2、视图的作用有哪些

3、数据库的完整性和安全性有什么区别?

4、SQL语言的特点是什么

5、数据字典通常包括哪几部分?

6、什么是基本表,什么是视图,二者的区别和联系是什么

7、DBMS的主要功能是什么

8、什么是数据库备份和恢复?为什么要备份和恢复数据库

9什么是事务?事务的作用?SQL中事务的语法结构是怎样的?

10、举出实体之间具有一对一、一对多、多对多的联系的例子。

11、数据库的并发 *** 作会带来哪些问题?如何解决

12、什么是日志文件?简述日志文件恢复事务的过程(即:事务故障的恢复的过程)。

13、关系完整性约束规则有哪三类?

14、数据库管理技术发展的三个阶段?

15、写出数据库的设计的五个阶段。

16、根据3NF的定义及规范化方法,对关系模式R(U,F)U={学号,姓名,所在系,系主任,课程号,成绩}F={学号→姓名,学号→所在系,所在系→系主任(学号,课程号)→成绩}进行分解,使其满足3NF。

17、什么是事务?事务有哪些特征

18、写出关系型数据库的第一、第二、第三范式的各自要求。

19、举三个例子分别说明二元联系的三种情况(1:1、1:M、M:N)。

运行sql文件出错

解决办法:使用Notepad打开文件,选择格式->无BOM的UTF8格式编码

create table 资环学生

(学号 char(8) primary key, 院系 as convert(tinyint,substring(学号,3,2))persisted not NULL,

--foreign key references 资环院系 (01=文学,02=资环,03=英语), 

姓名 char(4) not null,

 性别 char(2) check (性别='男'or 性别='女'),

 生源 char(6),

 状态 char(2) check (状态 in('正常','留级'))

 )

给你贴出来了,,,你错的不是一个2个地方,,好多地方有错,,,

你建立的外键的那个地方,我注释掉了,,

就是foreign key references 资环院系 (01=文学,02=资环,03=英语)

这句

01=文学,02=资环,03=英语

不知道你这是啥意思,,,,

首先字段名称规则规定,字段不能以数字开头,其次你的'文学'估计你的是字段内容,要加引号的

1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的,

比如,存储字符串“abc",对于CHAR

(20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2

(20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。

2.CHAR的效率比VARCHAR2的效率稍高。

3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

姓名:一般都用varchar

学号:可以是int或varchar

性别:一般都用char(2)或bit

院系:一般都用varchar

直接使用字符 ”N“,”M“ ,”F“  来存储,方案的选择主要依照个人习惯,和手机应用的需要。因为实际应用中,无论选择哪种方案,对数据库性能、即 *** 作复杂度都影响可以忽略。

扩展资料:

SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。

在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNIX *** 作系统上的应用。

参考资料来源:百度百科-Microsoft SQL Server

数据库中char和varchar的区别为:长度不同、效率不同、存储不同。

一、长度不同

1、char类型:char类型的长度是固定的。

2、varchar类型:varchar类型的长度是可变的。

二、效率不同

1、char类型:char类型每次修改的数据长度相同,效率更高。

2、varchar类型:varchar类型每次修改的数据长度不同,效率更低。

三、存储不同

1、char类型:char类型存储的时候是初始预计字符串再加上一个记录字符串长度的字节,占用空间较大。

2、varchar类型:varchar类型存储的时候是实际字符串再加上一个记录字符串长度的字节,占用空间较小。

以上就是关于char varchar varchar2 nchar nvarchar nvarchar2的区别及分别在什么情况下适用全部的内容,包括:char varchar varchar2 nchar nvarchar nvarchar2的区别及分别在什么情况下适用、SQL 数据库,求解答。、关于char与varchar,varchar2的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10202315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存