对于程序中的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
问题一:简扼描述数据库中外码是什么 某个关系的主码相应的属性在另一关系中出现,此时该主码在就是另一关系的外码,如有两个关系S和SC,其中S#是关系S的主码,相应的属性S#在关系SC中也出现,此时S#就是关系SC的外码
问题二:数据库中主码和外码怎么判断呀 主码 我们在建立数据库的时候,需要为每张表指定一个主码,主码也叫主键。
所谓主码就是在实体集中区分不同实体的候选码。
一个实体集中只能有一个主码,但可以有多个候选码。
外码,如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
问题三:关于数据库的外码 有错。。 系:主码-系号 学生:主码-学号 外码-系号 课程:主码-课程号 选课:外码-学号,课程号 开设:外码-系号,课程号
问题四:sql数据库中主码外码候选码等等一共有哪些码 都是什么意思 候选码是能够唯一标识一个记录的一组或一个属性,主码是从多个候选码中选择出的一组
外码是在本关系中的属性,但在另一个关系中作为主码的属性
问题五:数据库候选码和外码的确立 多对多 关系不能直接反应在数据库中,需要转换成两个一对多的关系。 而多出来的表包含了 其余两个表的主键,作为组合主键。就像途中的供应(编号,零件号)是其余两个表的主键一样。
问题六:数据库中数据库中 码、候选码、外部码之间的关系是什么 候选码,有时简称为码,主要是用来表示一个实体的属性或属性组;如果有多个候选码的话,则从中选择一个作为主码。而外部码指的是如果一个关系R的属性或者属性组K,并不是这个关系的码,而是另一个关系S的码,则称K是关系R的外部码,简称外码。
问题七:在Access数据库中,主码和外码的含义及它们之间的区别是什么? 10分 主码针对一二维表内部 外码是关联表之间的关键字 用于两个或者多个二维表之间的访问或者查询
问题八:数据库 1、简述你所知道的关系数据库。 2、关系的形式话定义。 3、简述外码及参照完备性。 1关系数据库应用数学方法来处理数据库。关系数据库系统是支持关系模型的数据库系统。关系模型中,实体以及实体间的联系都用关系来表示。在一个给定的应用领域中,所有实体以及实体之间联系的关系的 构成一个关系数据库。关系数据库的型称为关系数据库模式,包括:若干域的定义;在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某时刻对应的关系的 ,通常就称为关系数据库。 2形式化定义:1域:域是一组具有相同数据类型的值的 。2:笛卡尔积:域上的一种 运算。可表示为一个二维表。3:关系:D1D2…Dn的子集叫做在域D1,D2,…Dn上的关系,表示为R(D1,D2,…,Dn) 这里R表示关系的名字,n是关系的目或度(属性,表中的列)。关系中的每个元素是关系中的元组(表中的行),通常用t表示。n=1时,为单元关系(或一元关系),n=2时,为二元关系。关系是笛卡尔积的有限子集,也是一个二维表。 若关系中的某一属性组的值能唯一标示一个元组,则称该属性组为候选码。有多个候选码时,选定一个为主码(主键)。 3设F是基本关系R的一个或一组属性,但不是关系R的码。Ks是基本关系的S主码,如果F与Ks相对应,则称F是R的外码(外键)。参照完整性:现实世界中实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述,这样就自然存在着关系与关系间的引用,一个参照完整性将两个表中相应的元组联系起来。参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须为:或者为空(F中每个属性均为空),或者等于S中某个元组的主码值。 其实这个概念很模糊,其实说简单点,比如在学生选课关系中,学号是学生表主键,课号是课程表主键,学号和课号联合做选课表的主键,这都是实体完整性约束。 而选课表中,单独一个学号是外键、参照学生表学号,单独一个课号是外键,参照课程表课号,这都是参照完整性约束,比如课号的值只有1,但是你在选课表里取课号为1以外的值,就会出错,违反了参照完整性。
问题九:主码和外码各有什么作用 说下我的理解吧
主码是最小的候选码
外码是关联2个以上实体的字段
首先你得先通过sql语句从数据库中查出这个字段的值,如果有多个的话,可能还需要循环处理。然后进行比较,具体比较方法可以查看手册中的字符串函数,有专门用来比较每一位的。取得的结果作为if()括号中的判断条件,如何输出就不用我说了吧。如果字符串函数不熟练的话,你就用explode将字符串全切割,然后循环按位比较,不过这样做太麻烦
以上就是关于SQLServer的常用数据类型(字符型)详解(sqlserver字段类型)全部的内容,包括:SQLServer的常用数据类型(字符型)详解(sqlserver字段类型)、数据库中外码的定义、php如何判断数据库字段内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)