精华内容
下载资源
问答
  • 但是这个字段处理起来有比较的特殊性,记录一下。 插入: 直接写在SQL里面是不行的,一来SQL脚本有字符数限制,而来文章内容包含许多特殊字符,如换行,引号, 之类的东西,很麻烦。网上流行通用做法是先插入一个...
  • 数据库字段设计

    千次阅读 2020-09-30 16:46:28
    不同的关系型数据库字段类型的具体化上差异较,这里无法一一详述,但具体化的字段类型再,无外乎几种:字符、数字、日期、二进制。 B.不为空设默认值 表中应该尽可能避免可为NULL的列,且尽可能显示设置...

    A.字段类型介绍

    不同的关系型数据库在字段类型的具体化上差异较多,这里无法一一详述,但具体化的字段类型再多,无外乎几种:字符、数字、日期、二进制。

    在这里插入图片描述

    B.不为空设默认值

    表中应该尽可能避免可为NULL的列,且尽可能显示设置默认值,尤其是被索引的列。

    为什么?

    在MySQL数据库中,空值是不占用空间的,而NULL其实是占用空间的。再者,MySQL表的列中包含NULL的话,该列就不会包含在索引中,也就是说使用索引是无效的,现在不确定其它数据库是否也是如此。所以考虑今后可能会使用索引的字段,就要设置字段属性是NOT NULL。比如,如果某个字段后面可能会作为查询关键字使用LIKE的形式进行搜索,就要将该字段定义成索引以提高查询速度,那这个字段属性就是NOT NULL的。

    除以下数据类型的字段外:timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary、varbinary,表字段应尽可能显示设置默认值。建议数值型的默认值为数值0,布尔型的默认值为数值1(通常情况下,系统中所有逻辑型中数值0表示为“真”、“正常的”;数值1表示为“假”、“异常的”,这种编码后面还会有介绍),datetime、smalldatetime类型的字段没有默认值,必须为NULL。

    如果数据库中某个字段有默认值,那么觉得在程序开发过程中,对应实体类的属性应该设置同样的初始化值才合理,记得动软代码生成工具中的框架就是这样设置。之前自己的程序设计中没有注意到这点,自动生成的所有实体类的属性都没有默认值。

    注意区分NULL和空字符串是不同的,数值型字段中NULL和0更是两码事。如果在数据库设计过程中不允许出现NULL字段还好,但如果有允许NULL而没有设置默认值的字符型字段,程序对记录执行了写空字符串动作和压根未执行写动作是两码事;如果有允许NULL且设置默认值为空字符串的字段,则无法做这种区分。当然,通常情况下,我们认为文本框中空字符串的提交动作等同于未执行写入。有些类似的情况是,在程序开发中,一个空的List对象,或者一个new出来的空对象,和NULL也是不同的,要注意。

    像订单(会诊单)这种表,取消、退回、安排这些字段的信息都不是必须有的,可以分流到子表中存储,放在一张表中会导致出现很多可为NULL或空值的列。之前并不赞成这种过分分流的方法,因为这会另信息的维护变得麻烦,如再有类似情况,应该根据实际综合判断取舍。也要在设计时尽可能遵守第二、三范式,非主属性完全依赖于码(主键)、消除传递依赖,不要让某张表过分臃肿。

    C.类型长度设置

    当字段定义为字符串类型时建议使用varchar而不用nvarchar以节省空间,通常情况下,都要用尽量少的存储空间来存储一个字段的数据,能用int类型的就不用char类型,能用char类型就不用varchar类型,能用varchar(20)的就不用varchar(25)。char和varchar长度设计需要根据业务实际需要进行长度控制,禁止预留过长空间。比如主键要求用UUID,那就统一为char(32),可以固定的部分就都固定下来。varchar类型虽然根据实际长度进行存储,但内存分配则是根据指定长度,不合理的长度设计会导致内存的不合理占用。

    varchar是变长存储,字段长度是数据库一种约束,定义合理的长度也可以让人容易理解字段的用途。MySQL中定义的长度如果小于255,字段长度用1个字节表示,如果超过255,字段的长度将固定用2个字节表示。Oracle没有这样的问题。字段定义的长度对索引也有较大影响,MySQL数据库索引存储的长度都是定义的长度,不是实际字符的长度,这是一个非常大的问题,估计主要原因是为了实现简单,所以MySQL在索引上会浪费大量的空间保存字符串。

    前台、程序以及数据库各部分之间对字段大小的限制务必处理恰当,为了节省存储空间,选取的数据库字段容量在一定范围内应该尽可能小,而为了对程序提供更好的扩展支持,又应该尽可能的设置大些,具体字段类型、字段长度如何设置,根据实际情况取得均衡。而后台程序部分,对数值大小长度应该做好校验处理,确保插入数据库的值大小长度不要超过限制。同时前端也应该给出明确的校验提醒,让用户按提示输入,决不允许不提醒用户而擅自把数据处理后插入数据库中(这种错误真有人犯过)。这样,前端、程序、数据库全方位校验处理,自然可以保证数值的准备性、存取的合理性。

    除非要保存文章内容,text字段尽量少用,如果要用能拆到冗余表中最好。禁止使用blob类型保存大文本、附件、图片等,对于图片、文档等附件数据库中只保留原始文件名和存储路径。网上也有建议使用其他存储方式的,比如TFS、SFS等,可以参考。

    禁止使用float、double类型,建议使用decimal替代。decimal(a,b),a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从0到a之间的值。默认小数位数是0。比如decimal(5,2)规定了存储的值将不会超过5位数字,并且小数点后面有2位数字。

    D.Oracle的CLOB

    在Oracle中,CHAR为定长字符串,最长2000字节。VARCHAR2为变长字符串,最长4000字节。NCHAR和NVARCHAR2分别与CHAR和VARCHAR2相对应,但存储的数据为NLS字符。

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

    在Oracle中没有TEXT类型,但有用于大文本存储的CLOB类型。Clob是指大字符对象,也就是英文Character Large Object的缩写;Blob是指二进制大对象,也就是英文Binary Large Object的缩写;由此可见这两个类型都是用来存储大量数据而设计的。

    LONG最大存储2G字符数据,但现在已不推荐使用(改用CLOB);CLOB在Oracle 9i及以前,最大可存储4G字符数据,在Oracle10g及以后,最大可存储4G*数据库块大小的字符数据;NCLOB基本同CLOB,就是存储的数据为NLS。

    在Oracle数据库表中使用CLOB类型字段,最大的问题是备份数据时不好处理。在有些情况下,给政府、企业做项目,只给你Oracle的访问权限,而不给你Oracle所在服务器的操作权限,也就是说自己无法操作Oracle服务端工具。但Oracle的客户端中又没有exp、expdp命令,这样备份导出数据库就不好弄了(此处不提沟通协调甲方处理)。SQL Developer是Oracle的官方工具,用其导出数据库,如果导出的是SQL格式,那CLOB类型字段的数据将直接被忽略——这绝对是无法接受的。官网上有文章说可以将数据库导出为loader或pdf格式,自己尝试导出这两种格式,发现不能导出成单个文件,会导出很多的文件。而且导入时也需要用到额外的工具——Oracle服务端的sqlldr.exe,这样只借助客户端也是不行的。

    在SQL Developer“工具”菜单下,还有两个选项:“数据库Diff”及“数据库复制”,如果所处网络可同时访问源数据库和目标数据库,可用这种方法互相拷贝数据,但是同样的问题,这种数据库复制方法,仍然是不能处理COLB、BLOB的字段。而且我发现,凡是带有这两种字段的表,在复制时都没有数据,不是相应字段没有数据、是整个表的数据都没有复制,其它没有BLOB、CLOB字段的表,数据拷贝都正常。

    也曾想使用的PL/SQL Developer工具进行备份,导出了PL/SQL Developer自己的格式(pde)。可是却提示stream read error,到网上一查,原来PL/SQL Developer自己的格式也是不支持COLB、BLOB类型字段的导出的。

    之前同事介绍过Navicat for Oralce工具,但其在导出CLOB、BLOB类型的字段时,如果字段中的数据过长,也是无法再正常导入的。这个小工具看似简单轻巧,在执行一些操作时问题却很多,不宜作为一款常用的Oracle管理工具。

    这样看来,只有expdp命令才能有效导出clob、blob格式的字段了。

    不过,如果你虽然没有源数据库服务端的访问权限,却有目标数据库服务端的访问权限,且两个库可在一个网络中访问,也是有办法用EXP命令备份源数据库的。就是让目标数据库服务端的TNS监听源数据库的实例,再利用目标数据库Oracle服务端的exp.exe工具远程导出源数据库,导出导入命令和上面类似:

    此外,用PL/SQL Developer工具备份数据时,Export User Objects菜单命令导出的是SQL文件,在这里你可以将建表、序列、触发器、存储过程等的SQL语句全部导出成一个文件,但是这里面并不包括数据。要想导出数据,必须用Export Tables……菜单命令,导出DMP文件。当然也可以导出其它格式的文件(SQL、PDE),但建议用DMP格式,因为前面已经说过,如果表中有CLOB类型字段的话,用其它格式的导出方式恐怕有问题。

    如果一个表不存在,而这个表中没有CLOB、BLOB这种特殊数据类型的字段,用DMP导入数据时PL/SQL会自动建立这个表。但如果一个表不存在,而这个表中又有CLOB、BLOB这种特殊字段,直接导入DMP格式的文件会报错IMP-00003:遇到ORACLE错误959。所以在Oracle中导入数据库时应该先执行用Export User Objects导出的SQL文件,这样相关的序列、触发器、表结构都已经建好了,再导入用Export Tables……导出的DMP文件,也就是导入其中的数据,就万全了。

    E.数值类型选择

    float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)

    double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)

    decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

    float和double的相乘操作,数字溢出不会报错,会有精度的损失。当对decimal类型进行操作时,数值会因溢出而且报错。

    Oracle中的数值类型,Oracle只是在语法上支持decimal类型,但是在底层实际上它就是NUMBER类型,支持decimal类型是为了能把数据从Oracle数据库移到其他数据库中(如MySQL、DB2等)。Oracle的NUMBER数据类型的精度:NUMBER(P,S),P:1—38,S:-84—127。S代表的是小数位数,P代表的是总位数(整数位数和小数位数)。所以,平时如果在Oracle中用自增主键,长度设为NUMBER(10)的话,相当于NUMBER(10,0),表示最高可记录到十亿级的数据量。

    下图是MySQL中的整数型数值类型详述:

    F.通用字段处理

    日期时间类型字段,网上有建议,采用int来记录unix_timestamp,自己还是习惯用datetime。不过设计原则是粒度越小越好,所以这里要求日期时间类型的字段,尽可能精确到时分秒,用datetime类型。即便是像生日(birth_date)这种字段,一般只存储到年月日,但在选择字段类型时建议还是用datetime而非date,以防万一。如有部分时间字段着实无须记录到时分秒,则用date类型。严禁使用varchar等字符串类型记录日期时间,更不要把时间猜分,年在单独的字段、月在单独的字段、日又是单独字段,老实讲TM想不明白这种人的设计思路是什么样的。

    网络IP字段,网上有建议,除特殊情况一律用bigint来记录inet_aton值,但这种存储方式貌似只在MySQL中适用,这里要求还是用varchar存储。关于inet_aton想了解的话可以看下参考文献中的“MySQL的IP处理函数inet_aton()和inet_ntoa()”。

    字典编码字段,之前在SQLServer中设计数据库时统一使用char(2)类型,Oracle数据库中统一使用number(2),在MySQL中统一使用tinyint(2)。现在想来最合理的还是设置为tinyint(2),以后数据库字典编码字段统一按此设置。就是Oracle中没有tinyint类型,不知道如果在PD中设置此种类型,导入到Oracle时会自动转换处理还是直接报错。

    备注字段,尽可能在所有表中都保留这个字段,也是给前端信息录入预留一个可扩展部分。统一命名为remark,字段类型为varchar(200),最多100个中文字符。再多的话说明有额外信息,就不适合放在备注字段中了,要再加新字段存储。

    排序字段,不是每个表中都需要额外的排序字段,但有些表这必须有,比如记录菜单信息的表、门户网站中存放文章内容的表等。这里推荐统一使用int(10)做为所有表中的排序字段类型。

    字段设置部分撰述内容较多,相对详细,这是比较重要的一部分。以后的数据库设计,字段类型选择、字段长度设置部分都要以此为依据。

    展开全文
  • 数据库存放json的字段如何解析

    万次阅读 2017-06-07 17:34:13
    [java] view plain copy ...数据库中的数据格式是这样的: para字段中: [{paraName:"paraName",paraText:"最小火力",paraValue:"2000"}] 解析这样json的代码: if(para !=null && !"".equals(para)){ JS
     
    
    [java]  view plain  copy
    1. JSONArray的格式:必须要求是以[]开始和结束的
    2. 数据库中的数据格式是这样的:
    3. para字段中:
    4. [{paraName:"paraName",paraText:"最小火力",paraValue:"2000"}]
    5. 解析这样json的代码:
    6. if(para !=null && !"".equals(para)){
    7. JSONArray jsonArray = JSONArray.fromObject(para);
    8. for(int i=0;i<jsonArray.size();i++){
    9. JSONObject jobj = jsonArray.getJSONObject(i);
    10. String paraName = jobj.getString("paraName");
    11. String paraValue = jobj.getString("paraValue");
    12. sql = sql.replace("$"+paraName+"$",paraValue);
    13. }
    14. }
    展开全文
  • 常用的数据库字段类型及大小

    万次阅读 多人点赞 2018-08-28 08:30:15
    Oracle/MSSQL/Mysql 常用数据库字段类型及大小     ORACLE的数据类型  常用的数据库字段类型如下:  字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes `  VARCHAR2 可...

    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小

    这里写图片描述

    这里写图片描述 
    这里写图片描述

    这里写图片描述 
    这里写图片描述

    这里写图片描述

    ORACLE的数据类型 
    常用的数据库字段类型如下: 
    字段类型 中文说明 限制条件 其它说明 
    CHAR 固定长度字符串 最大长度2000 bytes ` 
    VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 
    NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes 
    NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes 
    DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题 
    LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作 
    RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 
    LONG RAW 可变长度的二进制数据 最大长度2G 同上 
    BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G 
    NCLOB 根据字符集而定的字符数据 最大长度4G 
    BFILE 存放在数据库外的二进制数据 最大长度4G 
    ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1 
    NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes 
    NUMBER(P,S) 数字类型 P为整数位,S为小数位 
    DECIMAL(P,S) 数字类型 P为整数位,S为小数位 
    INTEGER 整数类型 小的整数 FLOAT 浮点数类型 
    NUMBER(38),双精度 
    REAL 实数类型

    NUMBER(63),精度更高

    Oracle支持的数据类型可以分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。 
    字符数据类型 
    CHAR CHAR数据类型存储固定长度的子符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度,它的默认长度则设置为1.如果对某个CHAR类型变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充。 
    VARCHAR2存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度,但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为4000个字符。 
    因为VARCHAR2数据类型只存储为该列所赋的字符(不加空格),所以VARCHAR2需要的存储空间比CHAR数据类型要小。 
    Oracle推荐使用VARCHAR2 
    NCHAR和NVARCHAR2 NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指 定所使用的字符集,以便对数据库中数据进行编码。还可以指定一个辅助的字符集[即本地语言集(National Language Set,简称NLS)]。NCHAR和NVARCHAR2类型的列使用辅助字符集。 
    在Oracle9i中,可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。 
    LONG LONG数据类型可以存放2GB的字符数据,它是从早期版本中继承来的。现在如果想存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。 
    CLOB和NCLOB CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。 
    数字数据类型 
    Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。 
    NUMBER数据类型可以有两个限定符,如: 
    column NUMBER ( precision, scale) 
    precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。 
    scale表示数字小数点右边的位数,scale默认设置为0.  如果把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。 
    日期数据类型 
    Oracle标准日期格式为:DD-MON-YY HH:MI:SS 
    通过修改实例的参数NLS_DATE_FORMAT,可以改变实例中插入日期的格式。在一个会话期间,可以通过ALTER SESSION SQL命令来修改日期,或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。 
    其它的数据类型 
    RAW和LONG RAW RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时,Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象,如位图。 RAW数据类型可占用2KB的空间,而LONG RAW数据类型则可以占用2GB大小。 
    ROWID ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。 
    ROWID与磁盘驱动的特定位置有关,因此,ROWID是获得行的最快方法。但是,行的ROWID会随着卸载和重载数据库而发生变化,因此建议不要在事务 中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。 
    列或变量可以定义成ROWID数据类型,但是Oracle不能保证该列或变量的值是一个有效的ROWID. 
    LOB 
    LOB(大型对象)数据类型,可以保存4GB的信息。LOB有以下3种类型: 
    。CLOB,只能存储字符数据 
    。NCLOB,保存本地语言字符集数据 
    。BLOB,以二进制信息保存数据 
    可以指定将一个LOB数据保存在Oracle数据库内,还是指向一个包含次数据的外部文件。 
    LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口。 
    为了便于将LONG数据类型转换成LOB,Oracle9i包含许多同时支持LOB和LONG的函数,还包括一个ALTER TABLE语句的的新选择,它允许将LONG数据类型自动转换成LOB. 
    BFILE 
    BFILE数据类型用做指向存储在Oracle数据库以外的文件的指针。 
    XMLType 
    作为对XML支持的一部分,Oracle9i包含了一个新的数据类型XMLType.定义为XMLType的列将存储一个在字符LOB列中的XML文档。有许多内置的功能可以使你从文当中抽取单个节点,还可以在XMLType文档中对任何节点创建索引。 
    用户自定义数据 
    从Oracle8以后,用户可以定义自己的复杂数据类型,它们由Oracle基本数据类型组合而成。 
    AnyType、AnyData和AnyDataSet 
    Oracle包括3个新的数据类型,用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义,以便让Oracle9i知道如何处理这些类型的特定实现。 
    类型转换 
    Oracle会自动将某些数据类型转换成其他的数据类型,转换取决于包括该值的SQL语句。 
    数据转换还可以通过Oracle的类型转换函数显示地进行。 
    连接与比较 
    在大多数平台上Oracle SQL中的连接操作符用两条竖线(||)表示。连接是将两个字符值连接。Oracle的自动类型转换功能使得两个数字值也可以进行连接。 
    NULL 
    NULL值是关系数据库的重要特征之一。实际上,NULL不代表任何值,它表示没有值。如果要创建表的一个列,而这个列必须有值,那么应将它指定为NOT NULL,这表示该列不能包含NULL值。 
    任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值,那么会出现3种状态:TURE、FALSE以及两者都不是。 
    因为NULL值不等于0或其他任何值,所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。 
    NULL值特别适合以下情况:当一个列还未赋值时。如果选择不使用NULL值,那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性,同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户,并且导致累计操作的错误结果。

    SQL SERVER 数据类型详解 
    数据类型类型描述 
    1)二进制数据类型 
      二进制数据包括 Binary、Varbinary 和 Image 
      Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。 
      Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。 
      Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。 
      在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。 
    (2)字符数据类型 
      字符数据的类型包括 Char,Varchar 和 Text 
      字符数据是由任何字母、符号和数字任意组合而成的数据。 
      Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。 
    (3)Unicode 数据类型 
      Unicode 数据类型包括 Nchar,Nvarchar 和Ntext 
      在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。 
      在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。 
    (4)日期和时间数据类型 
      日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型 
      日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。 
      日期的格式可以设定。设置日期格式的命令如下: 
      Set DateFormat {format | @format _var| 
      其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。 
      例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式 
    (5)数字数据类型 
      数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数 
      整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是 
    Int,Smallint和 Tinyint。 
    Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。 
      精确小娄数据在 SQL Server 中的数据类型是Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。 
      在SQL Server 中,近似小数数据的数据类型是Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。 
    (6)货币数据表示正的或者负的货币数量 。 
      在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney  Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。 
    (7)特殊数据类型 
      特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即   Timestamp、Bit 和 Uniqueidentifier。 
      Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。 
      Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。 
      Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。 2.用户定义的数据类型 
      用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为   postal_code 的数据类型,它基于 Char 数据类型。 
      当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。 
    (1)创建用户定义的数据类型 
      创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下: 
      sp_addtype {type},[,system_data_bype][,’null_type’] 
      其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char   等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如’NULL’、’NOT NULL’或者’NONULL’。 
      例子: 
      Use cust 
      Exec sp_addtype ssn,’Varchar(11)’,”Not Null’ 
      创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。 
      例子: 
      Use cust 
      Exec sp_addtype birthday,datetime,’Null’ 
      创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。 
      例子: 
      Use master 
      Exec sp_addtype telephone,’varchar(24),’Not Null’ 
      Eexc sp_addtype fax,’varchar(24)’,’Null’ 
      创建两个数据类型,即 telephone 和 fax 
    (2)删除用户定义的数据类型 
      当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {‘type’}。 
      例子: 
      Use master 
      Exec sp_droptype ‘ssn’ 
      注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。 
    SQL SERVER的字段类型说明 
      以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。 
    字段类型描述 
    bit 0或1的整型数字 
    int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 
    smallint 从-2^15(-32,768)到2^15(32,767)的整型数字 
    tinyint 从0到255的整型数字 
    decimal 从-10^38到10^38-1的定精度与有效位数的数字 
    numeric decimal的同义词 
    money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 
    smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 
    float 从-1.79E+308到1.79E+308可变精度的数字 
    real 从-3.04E+38到3.04E+38可变精度的数字 
    datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 
    smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 
    timestamp 时间戳,一个数据库宽度的唯一数字 
    uniqueidentifier 全球唯一标识符GUID 
    char 定长非Unicode的字符型数据,最大长度为8000 
    varchar 变长非Unicode的字符型数据,最大长度为8000 
    text 变长非Unicode的字符型数据,最大长度为2^31-1(2G) 
    nchar 定长Unicode的字符型数据,最大长度为8000 
    nvarchar 变长Unicode的字符型数据,最大长度为8000 
    ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G) 
    binary 定长二进制数据,最大长度为8000 
    varbinary 变长二进制数据,最大长度为8000 
    image 变长二进制数据,最大长度为2^31-1(2G) 
    段类型说明请参考SQL SERVER提供的说明。

    这里写图片描述 
    这里写图片描述 
    SYBASE的字段类型如下: 
    字段类型描述字段长度及其缺省值 
    Char(Size) 
    用于保存定长(Size)字节的字符串数据。

    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。 
    Varchar(Size) 
    用于保存变长的字符串数据。其中最大字节长度由(Size)指定。 
    每行长度可变,最大长度为255字节。数据长度缺省为1 
    Nchar(Size) 
    多字节字符串。 
      
    每行定长(不足部分补为空格)。 长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。 
    Nvarchar(Size) 
    可变长,多字节字符串。 
    每行变长。长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。 
    Binary(Size) 
    固定长度的二进制字符串。 
    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。 
    Varbinary(Size) 
    可变长度的长度的二进制字符串。 
    每行长度可变,最大长度为255字节。数据长度缺省为1 
    Timestamp 
    用于改变管理的二进制值。 
    字节数为16 
    Datetime 
    保存定长的日期时间数据,范围为1753年1月1日到公元9999年12月21日,精度为3微秒间隔。 
    每行固定为8字节长度。 
    Smalldatetime 
    保存定长的日期时间数据,范围为1990年1月1日到公元2079年6月6日,精度为分钟间隔。 
    每行固定为4字节长度。 
    Int 
    保存整型数据,范围为-2147483647到+2147483647。 
    最大长度为4字节32 - 1字节或4G。 
    Smallint 
    保存整型数据,范围为-32767到+32767 
    最大长度为2字节32 - 1字节或4G。 
    Tinyint 
    保存整型数据,范围为0到255。 
    最大长度为1字节。 
    Float 
    保存浮点数据类型,范围为-2.23E-308到+2.23E-308。 
    最大长度为8字节。 
    Real 
    保存浮点数据类型,范围为-1.18E-38到+1.18E-38。 
    最大长度为4字节。 
    Numeric(P,S) 
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P) 
    最大长度为2~17字节。 
    Decimal(P,S) 
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P) 
    最大长度为2~17字节。 
    Money 
    保存货币值数据类型,范围为-922337203685477.5808到+922337203685477.5808 
    最大长度为8字节。 
    Smallmoney 
    保存货币值数据类型,范围为-214748.3647到+214748.3647 
    最大长度为4字节。 
    Text 
    保存大于255字节的栏或大于2KB页长度的文本数据。 
    最大长度为2G。 
    Image 
    保存大于255字节的栏或大于2KB页长度的二进制数据。 
    最大长度为2G。

    char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

    展开全文
  • 常用数据库字段类型及大小

    万次阅读 多人点赞 2017-09-10 21:27:07
    Oracle/MSSQL/Mysql 常用数据库字段类型及大小     ORACLE的数据类型  常用的数据库字段类型如下:  字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes `  VARCHAR2 ...

    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小

    这里写图片描述

    这里写图片描述 
    这里写图片描述

    这里写图片描述 
    这里写图片描述

    这里写图片描述

    ORACLE的数据类型 
    常用的数据库字段类型如下: 
    字段类型 中文说明 限制条件 其它说明 
    CHAR 固定长度字符串 最大长度2000 bytes ` 
    VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 
    NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes 
    NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes 
    DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题 
    LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作 
    RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 
    LONG RAW 可变长度的二进制数据 最大长度2G 同上 
    BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G 
    NCLOB 根据字符集而定的字符数据 最大长度4G 
    BFILE 存放在数据库外的二进制数据 最大长度4G 
    ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1 
    NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes 
    NUMBER(P,S) 数字类型 P为整数位,S为小数位 
    DECIMAL(P,S) 数字类型 P为整数位,S为小数位 
    INTEGER 整数类型 小的整数 FLOAT 浮点数类型 
    NUMBER(38),双精度 
    REAL 实数类型

    NUMBER(63),精度更高

    Oracle支持的数据类型可以分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。 
    字符数据类型 
    CHAR CHAR数据类型存储固定长度的子符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度,它的默认长度则设置为1.如果对某个CHAR类型变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充。 
    VARCHAR2存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度,但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为4000个字符。 
    因为VARCHAR2数据类型只存储为该列所赋的字符(不加空格),所以VARCHAR2需要的存储空间比CHAR数据类型要小。 
    Oracle推荐使用VARCHAR2 
    NCHAR和NVARCHAR2 NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指 定所使用的字符集,以便对数据库中数据进行编码。还可以指定一个辅助的字符集[即本地语言集(National Language Set,简称NLS)]。NCHAR和NVARCHAR2类型的列使用辅助字符集。 
    在Oracle9i中,可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。 
    LONG LONG数据类型可以存放2GB的字符数据,它是从早期版本中继承来的。现在如果想存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。 
    CLOB和NCLOB CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。 
    数字数据类型 
    Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。 
    NUMBER数据类型可以有两个限定符,如: 
    column NUMBER ( precision, scale) 
    precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。 
    scale表示数字小数点右边的位数,scale默认设置为0.  如果把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。 
    日期数据类型 
    Oracle标准日期格式为:DD-MON-YY HH:MI:SS 
    通过修改实例的参数NLS_DATE_FORMAT,可以改变实例中插入日期的格式。在一个会话期间,可以通过ALTER SESSION SQL命令来修改日期,或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。 
    其它的数据类型 
    RAW和LONG RAW RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时,Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象,如位图。 RAW数据类型可占用2KB的空间,而LONG RAW数据类型则可以占用2GB大小。 
    ROWID ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。 
    ROWID与磁盘驱动的特定位置有关,因此,ROWID是获得行的最快方法。但是,行的ROWID会随着卸载和重载数据库而发生变化,因此建议不要在事务 中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。 
    列或变量可以定义成ROWID数据类型,但是Oracle不能保证该列或变量的值是一个有效的ROWID. 
    LOB 
    LOB(大型对象)数据类型,可以保存4GB的信息。LOB有以下3种类型: 
    。CLOB,只能存储字符数据 
    。NCLOB,保存本地语言字符集数据 
    。BLOB,以二进制信息保存数据 
    可以指定将一个LOB数据保存在Oracle数据库内,还是指向一个包含次数据的外部文件。 
    LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口。 
    为了便于将LONG数据类型转换成LOB,Oracle9i包含许多同时支持LOB和LONG的函数,还包括一个ALTER TABLE语句的的新选择,它允许将LONG数据类型自动转换成LOB. 
    BFILE 
    BFILE数据类型用做指向存储在Oracle数据库以外的文件的指针。 
    XMLType 
    作为对XML支持的一部分,Oracle9i包含了一个新的数据类型XMLType.定义为XMLType的列将存储一个在字符LOB列中的XML文档。有许多内置的功能可以使你从文当中抽取单个节点,还可以在XMLType文档中对任何节点创建索引。 
    用户自定义数据 
    从Oracle8以后,用户可以定义自己的复杂数据类型,它们由Oracle基本数据类型组合而成。 
    AnyType、AnyData和AnyDataSet 
    Oracle包括3个新的数据类型,用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义,以便让Oracle9i知道如何处理这些类型的特定实现。 
    类型转换 
    Oracle会自动将某些数据类型转换成其他的数据类型,转换取决于包括该值的SQL语句。 
    数据转换还可以通过Oracle的类型转换函数显示地进行。 
    连接与比较 
    在大多数平台上Oracle SQL中的连接操作符用两条竖线(||)表示。连接是将两个字符值连接。Oracle的自动类型转换功能使得两个数字值也可以进行连接。 
    NULL 
    NULL值是关系数据库的重要特征之一。实际上,NULL不代表任何值,它表示没有值。如果要创建表的一个列,而这个列必须有值,那么应将它指定为NOT NULL,这表示该列不能包含NULL值。 
    任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值,那么会出现3种状态:TURE、FALSE以及两者都不是。 
    因为NULL值不等于0或其他任何值,所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。 
    NULL值特别适合以下情况:当一个列还未赋值时。如果选择不使用NULL值,那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性,同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户,并且导致累计操作的错误结果。

    SQL SERVER 数据类型详解 
    数据类型类型描述 
    1)二进制数据类型 
      二进制数据包括 Binary、Varbinary 和 Image 
      Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。 
      Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。 
      Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。 
      在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。 
    (2)字符数据类型 
      字符数据的类型包括 Char,Varchar 和 Text 
      字符数据是由任何字母、符号和数字任意组合而成的数据。 
      Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。 
    (3)Unicode 数据类型 
      Unicode 数据类型包括 Nchar,Nvarchar 和Ntext 
      在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。 
      在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。 
    (4)日期和时间数据类型 
      日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型 
      日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。 
      日期的格式可以设定。设置日期格式的命令如下: 
      Set DateFormat {format | @format _var| 
      其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。 
      例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式 
    (5)数字数据类型 
      数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数 
      整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是 
    Int,Smallint和 Tinyint。 
    Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。 
      精确小娄数据在 SQL Server 中的数据类型是Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。 
      在SQL Server 中,近似小数数据的数据类型是Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。 
    (6)货币数据表示正的或者负的货币数量 。 
      在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney  Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。 
    (7)特殊数据类型 
      特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即   Timestamp、Bit 和 Uniqueidentifier。 
      Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。 
      Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。 
      Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。 2.用户定义的数据类型 
      用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为   postal_code 的数据类型,它基于 Char 数据类型。 
      当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。 
    (1)创建用户定义的数据类型 
      创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下: 
      sp_addtype {type},[,system_data_bype][,’null_type’] 
      其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char   等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如’NULL’、’NOT NULL’或者’NONULL’。 
      例子: 
      Use cust 
      Exec sp_addtype ssn,’Varchar(11)’,”Not Null’ 
      创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。 
      例子: 
      Use cust 
      Exec sp_addtype birthday,datetime,’Null’ 
      创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。 
      例子: 
      Use master 
      Exec sp_addtype telephone,’varchar(24),’Not Null’ 
      Eexc sp_addtype fax,’varchar(24)’,’Null’ 
      创建两个数据类型,即 telephone 和 fax 
    (2)删除用户定义的数据类型 
      当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {‘type’}。 
      例子: 
      Use master 
      Exec sp_droptype ‘ssn’ 
      注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。 
    SQL SERVER的字段类型说明 
      以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。 
    字段类型描述 
    bit 0或1的整型数字 
    int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 
    smallint 从-2^15(-32,768)到2^15(32,767)的整型数字 
    tinyint 从0到255的整型数字 
    decimal 从-10^38到10^38-1的定精度与有效位数的数字 
    numeric decimal的同义词 
    money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 
    smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 
    float 从-1.79E+308到1.79E+308可变精度的数字 
    real 从-3.04E+38到3.04E+38可变精度的数字 
    datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 
    smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 
    timestamp 时间戳,一个数据库宽度的唯一数字 
    uniqueidentifier 全球唯一标识符GUID 
    char 定长非Unicode的字符型数据,最大长度为8000 
    varchar 变长非Unicode的字符型数据,最大长度为8000 
    text 变长非Unicode的字符型数据,最大长度为2^31-1(2G) 
    nchar 定长Unicode的字符型数据,最大长度为8000 
    nvarchar 变长Unicode的字符型数据,最大长度为8000 
    ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G) 
    binary 定长二进制数据,最大长度为8000 
    varbinary 变长二进制数据,最大长度为8000 
    image 变长二进制数据,最大长度为2^31-1(2G) 
    段类型说明请参考SQL SERVER提供的说明。

    这里写图片描述 
    这里写图片描述 
    SYBASE的字段类型如下: 
    字段类型描述字段长度及其缺省值 
    Char(Size) 
    用于保存定长(Size)字节的字符串数据。

    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。 
    Varchar(Size) 
    用于保存变长的字符串数据。其中最大字节长度由(Size)指定。 
    每行长度可变,最大长度为255字节。数据长度缺省为1 
    Nchar(Size) 
    多字节字符串。 
      
    每行定长(不足部分补为空格)。 长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。 
    Nvarchar(Size) 
    可变长,多字节字符串。 
    每行变长。长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。 
    Binary(Size) 
    固定长度的二进制字符串。 
    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。 
    Varbinary(Size) 
    可变长度的长度的二进制字符串。 
    每行长度可变,最大长度为255字节。数据长度缺省为1 
    Timestamp 
    用于改变管理的二进制值。 
    字节数为16 
    Datetime 
    保存定长的日期时间数据,范围为1753年1月1日到公元9999年12月21日,精度为3微秒间隔。 
    每行固定为8字节长度。 
    Smalldatetime 
    保存定长的日期时间数据,范围为1990年1月1日到公元2079年6月6日,精度为分钟间隔。 
    每行固定为4字节长度。 
    Int 
    保存整型数据,范围为-2147483647到+2147483647。 
    最大长度为4字节32 - 1字节或4G。 
    Smallint 
    保存整型数据,范围为-32767到+32767 
    最大长度为2字节32 - 1字节或4G。 
    Tinyint 
    保存整型数据,范围为0到255。 
    最大长度为1字节。 
    Float 
    保存浮点数据类型,范围为-2.23E-308到+2.23E-308。 
    最大长度为8字节。 
    Real 
    保存浮点数据类型,范围为-1.18E-38到+1.18E-38。 
    最大长度为4字节。 
    Numeric(P,S) 
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P) 
    最大长度为2~17字节。 
    Decimal(P,S) 
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P) 
    最大长度为2~17字节。 
    Money 
    保存货币值数据类型,范围为-922337203685477.5808到+922337203685477.5808 
    最大长度为8字节。 
    Smallmoney 
    保存货币值数据类型,范围为-214748.3647到+214748.3647 
    最大长度为4字节。 
    Text 
    保存大于255字节的栏或大于2KB页长度的文本数据。 
    最大长度为2G。 
    Image 
    保存大于255字节的栏或大于2KB页长度的二进制数据。 
    最大长度为2G。

    char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

    展开全文
  • 比如有的网友问:Sqlite数据库最大可以多大呀?会不会像acc数据库那样,几十MB就暴掉了? 不会的,放心用SQLite, 这是两个数量级的东西, 看下面的说明。 Access不能算真正意义上的数据库,但是Access是前台和后台在...
  • 字段可选择个类型时(比如生日字段可以用时间戳,即整数类型,可以用字符串 类型,也可以用日期 类型): 数字、二进制 优于 日期 优于 字符串。 原因: 一、在对数据进行比较(查询条件、JOIN条件及排序)...
  • 专门用来存放大量的描述信息,但是在插入数据时,出现了数据长度过长,导致数据插入失败的情况,但是此时又不想换更字段类型,感觉很浪费空间,在业务允许的情况下,提出了当数据长度超过text字段的长度时,可以...
  • 第一 它是一个实体,它是能够合理保管数据的"仓库",用户可以在这个仓库中存放自己想要管理的事务数据,它的储存空间很可以存放百万条、千万条、上亿条数据。 第二 它也是数据管理的新方法和技术,它能更合适的...
  • 现象:一般我们都是前端多少个字段数据库就保存多少个字段,  例如,填写爱好(多选):1、打篮球 2、踢足球 3、打台球 数据库有两种方法保存:1,添加一个字段hobby:1,2,3  2,新增一张表保存所有值:uid bobby_...
  • 数据库是以一定方式储存在一起、能与个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,但是在文件中读写数据速度相对较慢。用户可以对文件中的数据...
  • 数据库中比较常用的字段类型说明

    千次阅读 2018-09-16 21:55:35
    Numeric(10,2) 指字段是数字型,长度为10 小数为两位的  简要描述一下SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型  字符型  VARCHAR VS CHAR  VARCHAR型和CHAR型数据的这个差别是细微的,...
  • 当前,一些应用程序在数据库层使用 JSON格式的字段。JSON 有很好的灵活性,它可以自由地包含不同键。然后,关系型数据库对JSON的处理能力天生不足。因此,在关系型数据库中使用JSON时应当遵循一定的思想,从而既能...
  • 数据库、数据表、字段、等概念

    千次阅读 2020-01-11 17:15:08
    数据库和仓库很像可以用来储存大量信息。 数据表 数据表是一个临时保存数据的网格虚拟表(表示内存中数据的一个表)。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。 数据表是由表名...
  • 设置实体类中字段为非数据库字段

    千次阅读 2020-12-02 17:21:31
    设置实体类中字段为非数据库字段,加以下注解: @TableField(exist = false) 是不是数据库字段:true是;false不是 源码:
  • 数据库设计之字段类型

    千次阅读 2018-10-27 13:07:36
    1.一般的一个数据库字段的类型有text,int,tinyint,datetime,vachar,char这几个 2.它们的长度一般设置为: 类型 长度 小数点 text--》0 (存放文本,文章) datetime--》长度,小数点位数都设为0 (存放时间,...
  • sqlite数据库字段类型

    千次阅读 2020-03-25 14:30:39
    数据库字段类型: 字符型字段 topic=models.CharField(max_length=)#需要传入参数,设置字符串的最长长度 email=models.EmailTield()#电子邮箱字段,在CharField基础上,增加了邮箱的正则验证 a=models.SlugField()#...
  • 想要根据数据库中,表的字段生成 有序的字符串,用于自动插入sql时,避免数据插错列。 解决思路: 网上搜索了一下发现都是用describe查询表结构的,并没有解决方案。突然意识到:既然describe的输出也是表的形式,...
  • 数据库字段和长度的设计对于任何字段长度都不应该过于小气,否则未知的变化会造成前后台都要修改 1、对于开关型字段建议number(1,0) 而不是varchar2(1),避免用户错误保存Y/N,而不是1/0,这样可能会引入小写问题 .....
  • MySQL创建数据库和创建数据表

    万次阅读 多人点赞 2019-10-20 23:44:40
    MySQL 创建数据库和创建数据表 MySQL 是最常用的数据库,在数据库操作中,基本都是增删改查操作,简称CRUD。 在这之前,需要先安装好 MySQL ,然后创建好数据库、数据表、操作用户。 一、数据库操作语言 数据库...
  • 首先,让我们先打开数据库,没有安装数据库的小伙伴,可以参考上一篇文章(MySQL数据库基础 MySQL的下载安装及使用) 数据库 首先,我们先来对数据库进行操作。需要注意的是,这个数据库只得是储存数据的仓库...
  • 其中表名是在用户填写完数据库连接信息之后,点击表名和字段名的文本框之后触发方法,前端传给我数据库链接信息,我使用jdbc查询到之后,返回给前端的一个范围,用户在这个范围中选(可以打字,但是只能在我给的范围之内)....
  • php之批量更新mysql数据库字段

    千次阅读 2017-05-19 20:18:40
    为了提高数据库的响应速度,希望仅通过访问一次数据库完成对一个字段个记录的更新操作,也就是批量更新,在网上查了许多关于批量更新的例子,一直没找合适的,不过网上的资料给了我不少启发,现将这几天实现的...
  • alter table web_app_base add tmp_col varchar2(3999);-- 添加临时列    ... --将目标字段中数据加入到临时列中    update web_app_base set C_EDR_CTNT = null; --将目标字段数据清空   
  • 1.数据库设计14规则 1. 原始单据与实体之间的关系   可以是一对一、一对的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。  在特殊情况下,它们可能是一对对...
  • dedeCMS数据库字段详细介绍

    千次阅读 2018-07-08 15:57:00
    dedeCMS数据库字段详细介绍 dede_addonarticle 附加文章表 aid int(11) 文章编号 typeid int(11) 分类栏目编号 body mediumtext 文章内容 dede_addonflash 附加Flash表 aid int(11)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 257,942
精华内容 103,176
关键字:

数据库可以储存多大的字段