数据类型 订阅
数据元( Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型。 [1] 展开全文
数据元( Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型。 [1]
信息
外文名
Data element
又    称
数据类型
中文名
数据元
被认为
是不可再分的最小数据单元
数据元基本属性
(1)标识类属性:适用于数据元标识的属性。包括中文名称、英文名称、中文全拼、内部标识符、版本、注册机构、同义名称、语境。 [2]  (2)定义类属性:描述数据元语义方面的属性。包括定义、对象类词、特性词、应用约束。 [2]  (3)关系类属性:描述各数据元之间相互关联和(或)数据元与模式、数据元概念、对象、实体之间关联的属性。包括分类方案、分类方案值、关系。 [2]  (4)表示类属性:描述数据元表示方面的属性。包括表示词、数据类型、数据格式、值域、计量单位。 [2]  (5)管理类属性:描述数据元管理与控制方面的属性。包括状态、提交机构、批准日期、备注。 [2] 
收起全文
精华内容
下载资源
问答
  • 数据结构、数据类型、抽象数据类型之间的区别

    千次阅读 多人点赞 2019-11-03 20:15:37
    数据元素是最基本的数据单位,最基本的数据元素是一个二进制位。) 逻辑结构指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。包括: ...

    三者的定义(蓝字可忽略):

    • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构。(数据元素是最基本的数据单位,最基本的数据元素是一个二进制位。)
      • 逻辑结构指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。包括: 
        • 1.集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系; 
        • 2.线性结构:数据结构中的元素存在一对一的相互关系; 
        • 3.树形结构:数据结构中的元素存在一对多的相互关系; 
        • 4.图形结构:数据结构中的元素存在多对多的相互关系。
      • 物理结构:指数据的逻辑结构在计算机存储空间的存放形式。 
        • 数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。 
        • 数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与个数据项对应的子位串称为数据域(data field)。因此,节点是数据元素的机内表示(或机内映像)。 
        • 关系的机内表示(映像方法):数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。 
    • 数据类型:是一个值的集合以及定义在这个值集上的一组操作。数据类型的分类为:原子类型和结构类型。
      • 为什么要有数据类型:计算机中内存也是有限的,为了提高内存使用效率,不浪费空间,自然是需要设计出数据类型来划定多大数据占多大内存空间,就有了数据类型。
    • 抽象数据类型:抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型,如int,float等)来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。

    数据结构和数据类型的区别:

    • 数据类型的分类为:原子类型和结构类型;
      • 原子类型 = 一种值的集合 + 定义在值集合上的一组操作。(比如:int,float,字符串)
        • int型:包括值集(1,2,3,4,5。。。),并且可以在这些值上进行+-*/
      • 结构类型 = 一种数据结构 + 定义在这种数据结构上的一组操作。(比如:python中的列表,字典,元组)
      • 原子类型 + 结构类型 = 数据类型
    • 总结:数据结构是一种值(值=数据元素)的集合(根据数据结构的定义,只是给“值的集合”加了个约束:数据元素相互之间存在一种或多种特定关系,所以可以把数据结构看作一种值的集合),这种值集+定义在值集上的一组操作就是结构类型,而结构类型是数据类型的一种,所以数据结构是一种数据类型。
    • 数据结构可以看成是数据类型的一个子集(如下图):

    数据类型与抽象数据类型的区别:

    • 数据抽象的意义在于数据类型的数学抽象特性。抽象数据类型和数据类型实质上都是概念,只不过抽象数据类型是对数据类型的进一步抽象。不仅限于各种不同的计算机处理器中已经实现的数据类型,还包括为解决更为复杂的问题而由用户自定义的复杂数据类型。不仅限于各种不同的计算机处理器中已经实现的数据类型,还包括为解决更为复杂的问题而由用户自定义的复杂数据类型。如:C++中的类就是抽象数据类型的一种具体实现。
    • 通俗的讲:抽象数据类型,泛指除基本数据类型以外的数据类型。
      • 什么叫类型?就是一类数据。基本数据类型被人做是最基本地,不可再划分的数据,一般就是整形、浮点型、以及字符型。抽象数据类型是由若干基本数据类型归并之后形成的一种新的数据类型,这种类型由用户定义,功能操作比基本数据类型更多,一般包括结构体和类。其实说白了,抽象数据类型就是把一些有一定关联的基本数据类型打包,然后当做新的数据类型使用。
      • 抽象数据类型的用处:比如你要实现对一个人地信息管理,如果你只用基本数据类型那么你需要定义很多数据类型的变量比如名字、性别、出生地、生日之类的,并且操作起来不方便。如果用抽象数据来实现就简单了,直接把这些信息放包装在一个新的数据类型中,然后就可以直接定义这样的一个变量就可以了。

    如果还不清楚两者的区别的话可以参考一下这篇文章:https://blog.csdn.net/weixin_42257806/article/details/80892797

    数据结构和抽象数据类型之间的区别:

    • “数据结构”定义为一个二元组(D,S),即两个集合,D是数据元素的集合,S是数据元素之间一个或多个关系的集合。
    • “抽象数据类型”本质是“数据类型”,与计算机相关,涉及数据的存储及如何用存储来反应数据元素之间的关系。它定义为一个三元组(D,S,P),加上的P是定义的一组针对存储的数据操作(如插入,删除,排序等)。
    • 总之“抽象数据类型”是“物理”概念,“数据结构”是“逻辑”概念。“抽象数据类型”来实现“数据结构”。

    上面就是对数据结构、数据类型、抽象数据类型之间的区别的说明,若有错误,欢迎指正。

    展开全文
  • JS数据类型之基本数据类型

    万次阅读 多人点赞 2019-06-28 16:46:43
    一、数据类型简介: 1.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型); 2.js常用的基本数据类型包括undefined、null、number、boolean、string; 3.js的...

    一、数据类型简介:

    1.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型);

    2.js常用的基本数据类型包括undefined、null、number、boolean、string;

    3.js的引用数据类型也就是对象类型Object,比如:Object、array、function、data等;

    二、基本数据类型特点:

    1.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值;

    2.基本数据类型的值是不可变的,任何方法都无法改变一个基本数据类型的值,比如一个字符串:

      let name = 'zhangsan'
      name.substr()
      console.log(name) // 输出:zhangsan
      let age = 'firstblood'
      age.toUpperCase()
      console.log(age) // 输出:firstblood

    通过上面的例子,我们可以发现原来定义的变量name的值始终没有发生改变,而调用substr()和toUpperCase()方法后返回的是一个新的字符串,跟原来定义的变量name并没有什么关系。

    再看下面的代码:

      let name = 'zhangsan'
      name = 'lisi'
      console.log(name) // 输出:lisi

    上面的例子看来name的值好像“改变了”,这里的基础数据类型是string,也就是“zhagnsan”,这里的“zhangsan”是不可以改变的,name只是指向“zhagnsan”的一个指针,指针的指向不可以改变,所以下面的name = 'lisi',将name指向了“lisi”,这里的“lisi”也是不可以改变的。也就是说这里的改变只是“指针指向的改变”。

    3.基本数据类型不可以添加属性和方法:

      let user = 'zhangsan'
      user.age = 18
      user.method = function () {
        console.log('12345')
      }
      console.log(user.age) // 输出:undefined
      console.log(user.method) // 输出:undefined

    上面的代码可以看出,基本数据类型是不能添加属性和方法的,再次说明基本数据类型是不可变的。

    4.基本数据类型的赋值是简单的赋值(如果从一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值,然后把该值赋值到位新变量分配的位置上):

      let a = 18
      let b = a
      a++
      console.log(a) // 输出:19
      console.log(b) // 输出:18

    上面的代码,a中保存的值是18,当使用a的值来初始化b时,b中也保存了值18,但是b中的18和a中的18完全是独立的,b中的值只是a中值的一个副本,所以这两个变量可以参与任何操作而不会相互影响。

    5.基本数据类型的比较是值的比较:

      var a = '{}'
      var b = '{}'
      console.log(a === b) // 输出:true

    6.基本类型的值在内存中占据固定大小的空间,被保存在栈内存中。(从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本);

    假如有以下几个基本类型的变量:

      let name = 'zhangsan'
      let age = 18
      let weight = '60kg'

    他的存储结构如下图(栈区包括了变量的标识符和变量的值):

    三、基本数据类型详解:

    1.number类型

    ①number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后至少有一位数字)。

    浮点数会自动转换为整数,如下:

      let num = 1.00
      console.log(num) // 输出:1,自动转换为了整数

    ②浮点数的最高精度是17位,看下面的例子:

      let a = 0.1
      let b = 0.2
      console.log(a + b) // 输出:0.30000000000000004

    上面的例子,结果竟然不是0.3,至于其他变成语言,也会遇到这种情况(关于浮点数计算会产生误差问题,其他有些变成语言也会出现类似情况。)

    ③NaN:非数字类型,特点:涉及到任何关于NaN的操作,都会返回NaN,而且NaN不等于自身。如下:

      let name = 'lisi'
      console.log(name / 10) // 输出:NaN
      console.log(NaN === NaN) // 输出:false

    ④isNaN()函数用于判断是否是一个非数字类型,如果传入的参数是一个非数字类型,那么返回true,否则返回false;

    ⑤isNaN()函数传入一个参数,函数会先将参数转换为数值,如果参数类型为对象类型,会先调用对象的valueOf()方法,再确定该方法返回的值是否可以转换为数值类型,如果不能,再调用对象的toString()方法,再确定返回值;

    ⑦数值转化:

    Number(),转型函数,可以用于任何数据类型

    parseInt(),将值转换为整型,用的较多

    parseFloat(),将值转换为浮点型

    2.string类型

    ①字符串类型中的单双引号作用一样;

    ②字符串有length属性,可以取得字符串的长度:

      let str = 'Hello world'
      console.log(str.length) // 输出:11

    ③字符串的值是不可变的,要改变一个字符串的值,首先要销毁原来的字符串,再用另一个包含新值得字符串区填充该字符串;

    ④字符串转换:

    String(),转型函数,适用于任何数据类型(null,undefined转换后为null和undefined)

    toString()方法可以把一个逻辑值转换为字符串,并返回结果(null、undefined没有toString()方法)

      let ab = 'zhangsan'
      let bc = null
      let cd = undefined
      console.log(ab.toString())  // 输出:zhangsan
      // console.log(bc.toString())  // error 报错
      // console.log(cd.toString())  // error 报错
      console.log(String(ab))  // 输出:zhangsan
      console.log(String(bc))  // 输出:null
      console.log(String(cd))  // 输出:undefined

    3.boolean类型

    ①这个类型只有两个值,true和false;

    ②Boolean(),转型函数,将某个值转换为Boolean类型

    4.null类型

    ①null类型被看做空对象指针,只有一个值,即null值,所以在用typeof操作符去检测null类型的值得时候,结果是object类型;

    ②如果你定义了一个变量,但是想在以后把这个对象当做一个对象来使用,最好将该对象初始化为null值

    5.undefined类型

    ①只有一个值,即undefined,如果声明了一个变量,但是未给变量初始化值,那么这个变量的值就是undefined:

      let name = 'zhangsan'
      let age
      console.log(name) // 输出:zhangsan
      console.log(age) // undefined,因为声明了age,但是没有给初始化值

    ②调用函数时,应该提供的参数没有提供,该参数等于undefined;

    ③对象没有赋值的属性,该属性的值为undefined;

    ④函数没有返回值,默认返回undefined。

     

     

     

    参考文章:

    https://mp.weixin.qq.com/s/YMpKnUUKPPIG6FD6CGzfTg  

    http://www.jb51.net/article/101341.htm

    展开全文
  • oracle数据类型

    千次阅读 2018-11-08 20:20:39
    oracle数据类型

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

     

     

    oracle数据类型 

     

     

    有道是,磨刀不误砍柴工。多了解一些底层的东西,对于Oracle开发、维护大有裨益。个人总结了一些Oracle数据类型集解,相信读者阅读了本文以后,Oracle数据库开发起来会事半功倍!


    在Oracle数据库中,每个关系表都由许多列组成。给每一列指派特定的数据类型来定义将在这个列中存储得数据类型。

    1、CHAR
    最多可以以固定长度的格式存储2000个字符或字节。默认指定为以字符形式进行存储,这个数据类型是固定长度的,并且当位数不够时,需要在其右边添加空格来补满。

    例如:
    CREATE TABLE test
    (name char(20))

    2、VARCHAR和VARCHAR2
    最多可以以可变长度来存储4000B,因此不需要空格来作补充。VARCHAR2 比 VARCHAR 更适合使用,由于兼容性的原因,所以仍然在 Oracle 数据库中保留着 VARCHAR 。

    例如:
    CREATE TABLE test
    (name varchar2(20))

    3、NCHAR
    NLS(national language support , 国际语言支持)的数据类型仅可以存储由数据库 NLS 字符集定义的 Unicode 字符集。该数据类型最多可以存储2000B。NCHAR 的列在位数不够时需要在右边填充空格。例如:
    CREATE TABLE test
    (name Nchar(20))
    注意:在 Oracle9i 数据库及其更新的版本中,仅使用 Unicode 数据类型

    4、NVARCHAR2
    NLS 的数据类型与 VARCHAR2 数据类型等价。这个数据类型最多可存储4000B 。例如:
    CREATE TABLE test
    (name Nvarchar2(20))
    注意:在 Oracle9i 数据库及其更新的版本中,仅使用 Unicode 数据类型

    5、NUMBER
    用于存储零、正数、定长负数以及浮点数。NUMBER 数据类型可以以 NUMBER(P,S)的

    形式来定义数字的精度和范围。 这里:p 表示精度 (1-38),它表示存储在列中数

    字的总长度是 p 位: s 表示范围,它表示小数点后的位数。该取值范围可以从-84 到 127 。例如:
    CREATE TABLE test
    (name number(5))
    使用精度 5 来定义一个正数(如 12345)。
    CREATE TABLE test
    (name number(5,2))
    使用精度 5 和范围 2 来定义一个数字。符合这种数据类型的数字值如 123.45 和 12.34

    6、LONG
    LONG 类型的列存储可变长度的字符串,最多可以存储 2GB 的数据。LONG 类型的列有很多在 VARCHAR2 类型列中所具有的特征。可以使用 LONG 类型的列来存储 LONG 类型的文本字符串。LONG 数据类型的使用是为了向前兼容的需要。建议使用 LOB 数据类型来代替 LONG 类型。例如:
    CREATE TABLE test
    (name long)

    7、DATE
    用于在数据库中存储日期和时间。存储时间的精度可以达到 1/100s。不提供时区的相关信息。例如:
    CREATE TABLE test
    (name DATE)

    8、TIMESTAMP
    使用年、月、日、小时、分钟、秒域来对日期/时间提供更详细的支持。最多可以使用 9 位数字的精度来存储秒(受底层操作系统支持的限制)。这个数据类型没有时区的相关信息,它可以在 Oracle9i 数据库及其更新的版本中使用。例如:
    CREATE TABLE test
    (timestamp_column TIMESTAMP);

    9、TIMESTAMP WITH TIME ZONE
    包含 TIMESTAMP 数据类型中的所有域,除此之外,还包含两个额外的域:timezone_hour 和 timezone_minute。这个数据类型包含支持时区的相关信息。这个数据类型可以在 Oracle9i 数据库及其更新的版本中使用。例如:
    CREATE TABLE test
    (timestamp_column
    TIMESTAMP WITH
    TIME ZONE);

    10、TIMESTAMP WITH LOCAL TIME ZONE
    除了在数据库中存储的时区采用标准化以外,所包含的其他域与 TIMESTAMP 数据类型中的域相同。当选择列时,将日期/时间标准为会话的时区。这个数据类型可以在 Oracle9i 数据库及其更新的版本中使用。例如
    CREATE TABLE test
    (timestamp_column
    TIMESTAMP WITH
    LOCAL TIME ZONE);

    11、INTERVAL YEAR TO MONTH
    用于存储一个时间段,由月份和年组成。需要 5B 来存储。这个数据类型可以在 Oracle9i 数据库及其更新的版本中使用。例如:
    SELECT INTERVAL
    '01-05'
    YEAR TO MONTH -
    INTERVAL '01-02' YEAR
    TO MONTH FROM dual;

    12、INTERVAL DAY TO SECOND
    用于存储一个时间段,由日和秒组成。需要 11B 来存储。这个数据类型可以在 Oracle9i 数据库及其更新的版本中使用。例如:
    SELECT INTERVAL
    '100 10:20:42.22'
    DAY(3) TO SECOND(2) -
    INTERVAL
    '101 10:20:42.22'
    DAY(3) TO SECOND(2)
    FROM dual;

    13、RAW
    用于存储 raw 类型的二进制数据。最多可以存储 2000B。建议使用 BLOB 来代替它。例如:
    CREATE TABLE test
    (raw_column
    RAW(2000));

    14、LONG RAW
    用于存储 raw 类型的二进制数据。最多可以存储 2GB 的数据。建议使用BLOB来代替它。例如:
    CREATE TABLE test
    (raw_column LONG RAW);

    15、ROWID
    表中 ROWID 类型的字符串表示。使用这个数据类型来存储由 ROWID 类型伪列的返回值。例如:
    CREATE TABLE test
    (rowid_column ROWID);

    16、UROWID
    在索引组织表中表示逻辑行地址。例如:
    CREATE TABLE test
    (urowid_column UROWID);

    17、CLOB
    用于存储基于字符的大对象。在 Oracle9i 数据库中最多可以存储 4GB 的数据,这比 Oracle10g 数据库中可存储的最大数据还要大,这也是现在数据库规定块大小的一个因素(~4GB* 数据块大小)。例如:
    CREATE TABLE test
    (clob_column CLOB);

    18、NCLOB
    可以使用由数据库国际字符集所定义的字符集来存储仅为 Unicode 类型的基于字符的数据。最多可以存储 4GB 的数据,这比 Oracle10g 数据库中可存储的最大数据还要大,这也是现在数据库规定块大小的一个因素(~4GB* 数据块大小)。例如:
    CREATE TABLE test
    (nclob_column NCLOB);

    19、BLOB
    最多可以存储 4GB 数据的二进制大对象,这比 Oracle10g数据库中可存储的最大数据还要大,这也是现在数据库规定块大小的一个因素(~4GB* 数据库块大小)。例如:
    CREATE TABLE test
    (blob_column BLOB);

    20、BFILE
    存储指向数据库外部文件的定位符。外部文件最大为 4GB。例如:
    CREATE TABLE test
    (bfile_column BFILE);

    21、BINARY_FLOAT
    该数据类型是一个基于 ANSI_IEEE745 标准的浮点数据类型。它定义了一个 32 位的双精度浮点数。这个数据类型需要 5B 的存储空间。例如:
    CREATE TABLE test
    (b_float BINARY_FLOAT);

    22、BINARY_DOUBLE
    该数据类型是一个基于 ANSI_IEEE745 标准的双精度浮点数据类型,它定义了一个32位的双精度浮点数。这个数据类型需要 9B 节的存储空间。例如:
    CREATE TABLE test
    (b_float BINARY_DOUBLE);


    关于各种数据类型的注释

    1、关于 CHAR 和 VARCHAR2 数据类型的注释
    由数据库字符集来确定特定的 CHAR、VARCHAR 或者 VARCHAR2 字符类型所占的字节数。多字节字符集中的字符可以存储 1~4B。CHAR 或 VARCHAR2 数据类型的大小由该数据类型可以存储的字节数或字符数来决定(这成为字符的语义)。所有定义的存储大小都是默认以字节为单位的。如果使用多字节字符集(大部分常见的西方字符集都是以单字节为单位的,而值得注意的是,有一个例外就是 UTF 字符集不是以单字节为单位的),则可能需要定义以字符为单位的存储,下面的例子说明了这个问题:

    CREATE TABLE test
    (name VARCHAR2(20 char));

    建议在表的末尾处创建一些值为 NULL 的列。通过使用这种方法,可以用 VARCHAR2 数据类型来存储一些数据,但不能使用 CHAR 数据类型来存储数据,因为 Oracle 数据库是以在一行中连续存储多个 NULL 值的方式来进行存储的。

    Oracle9i 数据库及其更新的版本提供数据压缩功能,该功能仅在包含于只读表空间中的表中使用(也就是说,表中的数据将不会改变)。仅当通过下面的批量装载(bulk-load)操作中的任意一种操作将数据装载进表中时,才会执行数据压缩操作


    使用 create table as select(CTAS)操作来创建表。
    在直接模式下的 insert 操作或者并行的 insert 操作。
    SQL*Loader 装载程序在直接模式下的操作。

    注意:
    如果使用 update 语句对数据进行了修改,则已经压缩过的数据块将不会再次压缩!因此,一张很小的表可以快速地增长成一张很大的表。通过使用 alter table move 命令可以在已经存在的表中压缩数据。下面是创建压缩表的例子和对已经存在的表进行压缩的例子:

    CREATE TABLE my_tab (id NUMBER,current_value VARCHAR2(2000)) COMPRESS;
    ALTER TABLE my_comp_tab MOVE COMPRESS;

    关于 CHAR 和 VARCHAR2 数据类型,常常会有这样一个问题:到底是用哪一个数据类型最好?下面是对这个问题的一些指导性建议:
    通常 VARCHAR2 数据类型比 CHAR 数据类型优先使用。
    如果数据大小是变化的则在数据库中使用 VARCHAR2 数据类型可以节省空间。
    如果 VARCHAR2 数据类型列中的数据需要频繁更新,则 VARCHAR2 数据类型列的扩展可能会导致行连接或者行迁移的发生。当最终需要使用 VARCHAR2 数据类型列总大小的时候,可以考虑使用 CHAR 数据类型来代替 VARCHAR2 数据类型。

    注意:
    通常来说,使用 VARCHAR2(1)数据类型比使用 CHAR(1)数据类型开销要大,但上面所讲的则是例外。

    2、关于 NUMBER 数据类型的注释
    NUMBER 数据类型内部使用科学计数法以可变长度格式来存储数据。使用 1B 存储指数,而另外 20B(这个字节数可以变化)用于存储该数字剩下的部分。这种存储模式使得 NUMBER 数据类型可以表示的精度为 38 位。

    如果想要确定给定的数字所占字节数的大小,可以使用 vsize 函数,如下所示:

    SQL>SELECT VSIZE(100) FROM dual;
    VSIZE(100)
    ----------
     2

    在上面的例子中,该 vsize 函数用于将数字的大小指定为100.使用 2B 存储。1B 存储数字,另 1B存储指数。
    也可以使用 dump 函数来确定任意列的具体大小,如下所示:
    SQL>SELECT id,dump(id) did FROM test;
     ID DID
    -----------------------------
     123 Typ=2 Len=3: 194,2,24
     141 Typ=2 Len=3: 194,2,42
         123456 Typ=2 Len=4: 195,13,35,57

    NUMBER 数据类型可以有若干种形式来定义。可以根据需要使用或禁用精度和范围的方式来定义 NUMBER 数据类型。如果使用特定的精度来定义 NUMBER 列,则当超过所定义的精度时,Oracle 数据库将会产生错误。例如,NUMBER(6,2) 在存储数字 1234.56 时,不会对该数字的值产生任何影响,而在存储数字 123.456 时将会对该数字进行四舍五入,最终存储的数字将变成 123.46;如果以相同的 NUMBER 数据类型来存储数字 12345.67 时,数据库将产生错误,因为该数字的精度是 7 而不是 6.

    最后需要注意的是,也可以将列定义为没有精度的 NUMBER 数据类型,这表明将把

    NUMBER 数据类型的列作为没有范围属性的整数来看待。

    3、关于 LONG RAW 数据类型的注释

    LONG RAW 数据类型用于存储数据库无法解释的二进制数据。这个数据类型最多能够存储 2GB 的数据并且它的存储容量是可变的。Oracle 数据库不鼓励使用 LONG RAW 数据类型,因为该数据类型已经由 BLOB 数据类型所代替了。Oracle 数据库

    (Oracle9i数据库及其更新的版本)已经提供了通过 alter table 命令将 LONG RAW 数据类型列转换到相应的 CLOB 数据类型的能力。也可以使用 to_lob 函数将 LONG RAW 数据格式转换为 BLOB 数据格式。

    4、关于 LONG 数据类型的注释

    LONG 数据类型用于存储大量的字符文本。LONG 数据类型会受到某些存储的限制,最多可以存储 2GB 的数据。Oracle 数据库不鼓励使用 LONG 数据类型,因为这个数据类型已经由 CLOB 数据类型所代替了。Oracle数据库(Oracle9i 数据库及其更新的版本)已经提供了通过 alter table 命令将 LONG 数据类型列转换到相应的 LOB 数据类型的能力。也可以使用 to_lob 函数将 LONG 数据格式转换成 CLOB 数据格式。
    在下面的 SQL 语句类型中可以引用 LONG 数据类型列:
    * select 列表
    * 在 update 语句的 set 子句中
    * 在 insert 语句的 values 子句中使用 LONG 数据类型将会受到许多的限制;
    * 在每个表中只允许使用一个 LONG 数据类型的列。
    * 不能使用 LONG 数据类型的属性创建对象类型。
    * Oracle 数据库的 where 子句或者完整性约束不能引用 LONG 数据类型,仅有一种例外的情况,就是 LONG 数据类型可以出现在 NULL 和 NOT NULL 约束中,或者可以作为 NULL 或者 NOT NULL 的 where 子句谓语的一部分。
    * 不能索引 LONG 数据类型的列。
    * 不能对包含 LONG 数据类型的列进行分布操作。所有包含 LONG 数据类型列的事务

    必须在同一个数据库中协同工作。
    * 复制不支持 LONG 数据类型。
    * 如果所创建的表有 LONG 和 CLOB 两种数据类型的列,则在同一 SQL 语句中,同时绑定到 LONG 和 CLOB 数据类型列上的数据不能超过 4000B。但是可以将超过 4000B 的数据单独绑定到 LONG 数据类型或者 CLOB 数据类型列上。
    除了前面所讲的约束外,当 LONG 数据类型出现在 SQL 语句中时,还有另一些关于 LONG 数据类型列的约束。首先需要注意的是,下面的操作不支持 LONG 数据类型列:

    * group by
    * order by
    * connect by
    * distinct
    * unique
    * 任何 SQL 的内建函数、表达式或者条件
    * 任何 select 语句(在该语句中,union、intersect 或者 minus 操作将查询或者子查询结合起来)
    也会存在关于 LONG 数据类型的 DDL 约束,如下所示:
    * 在 create cluster 语句的表列中不能包含 LONG 数据类型列。
    * 在 alter table ...move 语句中不能包含 LONG 数据类型列。
    * 在 create table as select 语句的选择列表中不能包含 LONG 数据类型列。

    在PL/SQL 程序单元和触发器中使用 LONG 数据类型列时,同样也存在一些约束,如下所示:
    * 不能使用 LONG 数据类型表示触发器中的变量。
    * 触发器变量 :new 和 :old 的数据类型不能是 LONG 数据类型列。
    * PL/SQL 存储函数不能返回 LONG 数据类型,但是 PL/SQL 程序中的变量或参数可以使用 LONG 数据类型,不过不能从 SQL 语句中调用这种 PL/SQL 程序单元。

    5、关于 DATE 数据类型的注释

    DATE 数据类型是 Oracle 数据库中自带的一种用于存储日期和时间的方法。当 DATE 数据类型存储在数据库中的时候,这个数据类型占据 7B 的内部存储空间。这些字节分别用来存储世纪、年、月、日、小时、分和秒的详细信息。
    默认的显示格式为 dd-mon-yy,它表示日、月以及两位数的年,由破折号(-)将其分离。例如默认格式为:01-FEB-01。如果要重新定义日期格式,可以在数据库参数文件中设置 nls_date_format 变量。如果要改变日期的格式,也可以为特定的会话使

    用 alter session 命令设置 nls_date_format 变量的值。如下所示:
    SQL>SELECT sysdate FROM dual;
    SYSDATE
    ---------
    24-MAY-03
    SQL>ALTER SESSION SET nls_date_format='mm/dd/yyyy hh24:mi:ss';
    Session altered.
    SQL>SELECT sysdate FROM dual;
    SYSDATE
    --------------------
    06/25/2009 16:49:09

    在上面的例子中,将日期格式的时间标志改变为 24 小时制格式的时间,并且在年的前面加上了世纪值。
    如果想要在特定系统的所有会话中使用不同的日期格式,可以设置 NLS_LANG 操作系统的环境变量,并且同时将 NLS_DATE_FORMAT 作为操作系统环境变量进行设置。这将使得每一次登录系统时,会发出 alter session 命令。需要注意的是,只有当同时设置了环境变量 NLS_LANG 时,环境变量 NLS_DATE_FORMATE 才会生效。

    注意:
    如果使用 RMAN(Oracle Recovery Manager,Oracle 恢复管理),则显示的左右日期格式都将是默认的日期格式。应该在启动 RMAN 之前设置 NLS_LANG 和 NLS_DATE_FORMAT 环境变量以设定所需要的日期格式。

    在 SQL 语句中为了改变输出的格式,需要使用 Oracle 数据库的内建函数 to_char。如果有基于字符的日期要插入到 DATE 数据类型列中,则需要使用 to_date 函数。关于 to_char 函数转换日期格式的例子如下所示:
    SQL>SELECT to_char(sysdate,'mm/dd/yyyy hh24:mi:ss') the_date FROM dual;
     THE_DATE
    -----------------
    06/25/2009 17:05:36

    在上面的例子中,将日期格式转化为由四位数表示的年以及 24 小时制、分钟、秒表示的时间格式。

    6、关于 TIMESTAMP 和 INTERVAL 数据类型的注释

    某些新的 TIMESTAMP 数据类型的值依赖于数据库中适当的时区设置。数据库的时区默认为当前操作系统的时区。在数据库创建的时候,可以通过在 create database 命令中使用 set time_zone 参数为数据库设置不同的时区。也可以通过使用 alter database set time_zone 命令改变已经存在的数据库时区。使用 alter session 命令可以在会话级上修改时区设置。可以定义基于UTC(Universal Time Coordinated,协调世界时)小时偏移的时区,或者使用一个指定的时区,如 CST 或 EST。下面是设置数据库时区的例子:
    ALTER DATABASE SET time_zone='CST';
    ALTER DATABASE SET time_zone='-05:00';

    一些转换函数可以用于 TIMESTAMP 和 INTERVAL 数据类型。这些函数包括 to_data、to_char、to_timestamp_tz、to_yminterval 和 to_dsinterval,同时 nls_timestamp_format 参数和 nls_timestamp_tz_format 参数也与 TIMESTAMP 和 INTERVAL 数据类型有一些特定的关联。
    当从 TIMESTAMP 数据类型列中获取数据时,可以使用其他的内建函数。extract 函数可以从 TIMESTAMP 数据类型列中获取特定的信息,如小时或者分钟的信息。如下所示(注意,从 sysdate 函数到 TIMESTAMP 数据类型格式的隐式转换):
    CREATE TABLE my_tab(test_col TIMESTAMP);
    INSERT INTO my_tab VALUES (sysdate);
    SELECT test_col,EXTRACT(HOUR FROM test_col) FROM my_tab;
    TEST_COL           HOUR
    -------------------------------------
    25-JUNE -09 05.18.50.000000 PM     9

     


    参考文献:【美】夫雷曼(Freeman.R.G.)《Oracle + DBA 必备技能详解》
    关于《Oracle + DBA 必备技能详解》中译本,作者有一本影印版的PDF格式的,40M大小,已经上传至作者 CSDN 资源共享给大家,有兴趣的朋友可以去看看,下载地址:http://download.csdn.net/source/1410669

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block var foo = 'bar'; 

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    gantt
            dateFormat  YYYY-MM-DD
            title Adding GANTT diagram functionality to mermaid
            section 现有任务
            已完成               :done,    des1, 2014-01-06,2014-01-08
            进行中               :active,  des2, 2014-01-09, 3d
            计划一               :         des3, after des2, 5d
            计划二               :         des4, after des3, 5d
    
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • MySQL数据类型详解

    万次阅读 多人点赞 2018-08-13 16:40:22
    上一篇博客中我们学习了MySQL的基础知识以及表结构的相关操作,知道了MySQL中常用的数据类型有数值型、字符串型、日期时间类型 下面我们来使用一下这些数据类型。 数值类型 首先数值类型分为整型和浮点型 我们...

    在上一篇博客中,我们简单的了解了MySQL中的常用数据类型以及约束条件,本篇博客我们来对常用的数据类型做一个详细的介绍

    这里做个简单的回顾:

    MySQL数据类型

    MySQL支持多种类型的SQL数据类型:数值,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型等
    数据类型描述使用以下约定:

    • M表示整数类型的最大显示宽度。M表示整数类型的最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度。允许的最大值M取决于数据类型。
    • D适用于浮点和定点类型,并指示小数点后面的位数。最大可能值为30,但不应大于 M-2。
    • [ ] 表示类型定义的可选部分。

    在MySQL中常用数据类型主要分为以下几类

    1. 数值类型
    2. 字符串类型
    3. 日期时间类型

    约束条件

    约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。

    常用约束条件有以下这些

    • UNSIGNED :无符号,值从0开始,无负数
    • ZEROFILL:零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
    • NOT NULL:非空约束,表示该字段的值不能为空
    • DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值
    • PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
    • AUTO_INCREMENT:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
    • UNIQUE KEY:唯一值,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束
    • FOREIGN KEY:外键约束,目的是为了保证数据的完成性和唯一性,以及实现一对一或一对多关系

    数值类型

    数值类型包括整数型浮点型定点型

    整数型(精确值)

    • TINYINT[(M)] [UNSIGNED] [ZEROFILL] 范围非常小的整数,有符号的范围是 -128到127,无符号的范围是0到 255
    • SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 范围较小的整数,有符号的范围是 -32768到32767,无符号的范围是0到 65535
    • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 中等大小的整数,有符号的范围是 -8388608到8388607,无符号的范围是0到 16777215。
    • INT[(M)] [UNSIGNED] [ZEROFILL] 正常大小的整数,有符号的范围是 -2147483648到 2147483647。无符号的范围是 0到4294967295。
    • BIGINT[(M)] [UNSIGNED] [ZEROFILL] 大整数,有符号的范围是 -9223372036854775808到 9223372036854775807,无符号的范围是0到 18446744073709551615。

    这里写图片描述

    上面出现了两个词,有符号和无符号。
    我们来看看 有符号和无符号(UNSIGNED) 是啥玩意

    在计算机中,可以区分正负的类型,称为有符号类型。无正负的类型,称为无符号类型。
    简单的理解为就是
    有符号值可以表示负数,0以及正数
    无符号值只能为0或正数

    关于有符号和无符号详解可以看这篇文章或者自己百度百科。

    这里我们就不关心原理了,我们只需要知道有符号数可以表示负数,无符号数只能为非负数即可,如果不手动指定UNSIGNED,那么默认就是有符号的

    下面我们用一下整数型数据
    首先创建一个表

    CREATE TABLE int_db(
    a TINYINT,
    b SMALLINT,
    c MIDDLEINT,
    d INT,
    e BIGINT
    );
    

    查看表结构

    这里写图片描述

    我们来看看type这一列,可以看到,每个字段类型后面都有一个括号,括号里面的有个数值,这个数值实际上就是字段的显示宽度,也就是M的值,M表示整数类型的最大显示宽度。最大显示宽度为255.显示宽度与类型可包含的值范围无关

    我们在创建表的时候并没有指定字段类型的显示宽度,那么,默认的显示宽度则是该字段类型最大的显示宽度

    例如字段a的显示宽度为4,是因为TINYINT有符号值的范围是-128到127,
    -128的长度为4(负号、1、2、8共四位),所以默认的显示宽度最大为4,其他的以此类推

    下面我们再新建一个表,将字段a的修改为无符号类型的。再看看a字段的默认显示宽度
    这里写图片描述

    可以看到,默认显宽度就变成3了,因为无符号的TINYINT的值范围为0-255,没有负号,所以最多是3位。

    ZEROFILL
    下面我们来试试ZEROFILL约束,前面的博客中我们知道。使用该约束后当数据的长度比我们指定的显示宽度小的时候会使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED

    下面我们新建个表试一下,这次我们来指定一下显示宽度

    CREATE TABLE int_db2(
    a TINYINT(8) ZEROFILL,
    b TINYINT(5) UNSIGNED);
    

    然后插入一条记录:

    INSERT int_db2() VALUES(12,12);
    

    这里写图片描述
    可以看到,12变成了00000012,自动在前面补了0,这是因为指定的显示宽度是8,但是12只有两位,所以在前面补0,使长度为8。这就是ZEROFILL的效果

    浮点型

    • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
      一个小的(单精度)浮点数。允许值是-3.402823466E+38 到-1.175494351E-38, 0以及1.175494351E-38 到3.402823466E+38,M是总位数,D是小数点后面的位数。
    • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
      正常大小(双精度)浮点数。允许值是 -1.7976931348623157E+308到-2.2250738585072014E-308,0以及 2.2250738585072014E-308到 1.7976931348623157E+308。M是总位数,D是小数点后面的位数

    下面我们来用一下浮点型
    创建表

    CREATE TABLE float_db(
    a FLOAT(3,2),
    b DOUBLE(5,3)
    )
    

    我们指定a字段为FLOAT类型,总长度为3,小数点后两位为2,b字段总长度为5,小数点后两位长度为3

    这里写图片描述

    插入数据

    INSERT float_db VALUES(1.111,2.113);
    

    这里写图片描述

    可以看到,我们给a字段的值是1.111,但是只存进去了1.11
    浮点数存在精度丢失的问题,如果涉及到小数运算,尽量不要用浮点型

    定点型

    • DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
      常用于存储精确的小数,M是总位数,D是小数点后的位数。小数点和(负数) -符号不计入 M。如果 D为0,则值没有小数点或小数部分。最大位数(M)为 65. 最大支持小数(D)为30.如果D省略,则默认值为0.如果M省略,则默认值为10。M的范围是1到65。D范围为0到30,且不得大于M。

    我们来用一下DECIMAL类型

    首先创建表,先不指定M和D

    CREATE TABLE decimal_db(a DECIMAL);
    

    这里写图片描述

    可以看到,默认的总长度(M)为10,小数点位数(D)默认为0.

    插入一条数据

    INSERT decimal_db VALUES(30.556)
    

    这里写图片描述

    可以看到,存进去的数值被四舍五入阶段了,也就是说,DECIMAL也在存储时存在精度丢失的问题

    超出范围和溢出处理

    当MySQL将值存储在超出列数据类型允许范围的数值列中时,结果取决于当时生效的SQL模式:
    如果启用了严格的SQL模式,则MySQL会根据SQL标准拒绝带有错误的超出范围的值,并且插入失败。
    如果未启用限制模式,MySQL会将值截断到列数据类型范围的相应端点,并存储结果值,并产生一个警告

    在我们的配置文件中可以看到SQL模式的配置,关于SQL模式详情请看SQL模式官方文档

    这里写图片描述


    字符串类型

    常用的字符串类型有如下

    • CHAR[(M)] 一个固定长度的字符串,在存储时始终用空格填充指定长度。 M表示以字符为单位的列长度。M的范围为0到255.如果M省略,则长度为1,存储时占用M个字节
    • VARCHAR(M)可变长度的字符串,M 表示字符的最大列长度,M的范围是0到65,535,存储时占用**L+1(L<=M,L为实际字符的长度)**个字节
    • TINYTEXT[(M)] 不能有默认值,占用L+1个字节,L<2^8
    • TEXT[(M)] 不能有默认值,占用L+2个字节,L<2^16
    • MEDIUMTEXT[(M)] 不能有默认值,占用L+3个字节,L<2^24
    • LONGTEXT[(M)] 不能有默认值,占用L+4个字节,L<2^32
    • ENUM('value1','value2',...) ENUM是一个字符串对象,其值从允许值列表中选择,它只能有一个值,从值列表中选择,最多可包含65,535个不同的元素
    • SET('value1','value2',...) 字符串对象,该对象可以有零个或多个值,最多可包含64个不同的成员

    CHAR和VARCHAR

    创建表

    CREATE TABLE str_db(
    a CHAR(4),
    b VARCHAR(4));
    

    插入数据

    INSERT str_db() VALUES("","");
    INSERT str_db() VALUES("ab","ab");
    INSERT str_db() VALUES("abcd","abcd");
    INSERT str_db() VALUES("abcdefg","abcdefg");//在严格模式下,该条数据会插入失败,非严格模式则会对数据进行截取
    

    这里写图片描述

    我们看到查询的结果是一样的,但实际上他们存储时占用的长度是不一样的。
    CHAR类型不管存储的值的长度是多少,都会占用M个字节,而VARCHAR则占用实际长度+1个字节。

    这里写图片描述

    但是CHAR的查询效果要高于VARCHAR,所以说,如果字段的长度能够确定的话,比如手机号,身份证号之类的字段,可以用CHAR类型,像地址,邮箱之类的就用VARCHAR

    TEXT系列

    TEXT系列的存储范围比VARCHAR要大,当VARCHAR不满足时可以用TEXT系列中的类型。需要注意的是TEXT系列类型的字段不能有默认值,在检索的时候不存在大小写转换,没有CHAR和VARCHAR的效率高

    这里写图片描述

    ENUM

    枚举类型
    创建表

    CREATE TABLE enum_db(gender ENUM("男","女"));
    

    这里写图片描述

    插入数据

    INSERT enum_db() VALUES("男");
    INSERT enum_db() VALUES(1); 也可以使用编号插入值,等同于"男",序号从1开始
    INSERT enum_db() VALUES("女");
    INSERT enum_db() VALUES(2);等同于"女"
    

    这里写图片描述

    下面我们插入一条不是枚举集合中的数据试一下

    这里写图片描述

    可以看到是插入失败的

    SET

    在ENUM中我们只能从允许值列表中给字段插入一个值,而在SET类型中可以给字段插入多个值

    创建表

    
    CREATE TABLE set_db(
    a SET('1','2','3','4','5')
    
    )
    

    这里写图片描述

    插入数据

    
    INSERT set_db() VALUES('1')
    INSERT set_db() VALUES('1,2,3')
    

    这里写图片描述


    日期时间类型

    • TIME 范围是’-838:59:59.000000’ 到’838:59:59.000000’
    • DATE 支持的范围是 '1000-01-01’到 ‘9999-12-31’
    • DATETIME 日期和时间组合。支持的范围是 '1000-01-01 00:00:00.000000’到 ‘9999-12-31 23:59:59.999999’。
    • TIMESTAMP 时间戳。范围是’1970-01-01 00:00:01.000000’UTC到’2038-01-19 03:14:07.999999’UTC。
    • YEAR 范围是 1901到2155

    TIME

    我们可以看到TIME的存储范围是’-838:59:59’到 ‘838:59:59’,因为TIME类型不仅可以用于表示一天中的时间(,还可以用于表示两个事件之间的经过时间或时间间隔

    TIME的完整的显示为 D HH:MM:SS
    D:表示天数,当指定该值时,存储时小时会先乘以该值
    HH:表示小时
    MM:表示分钟
    SS:表示秒

    创建表:

    CREATE TABLE time_db(
    a TIME
    )
    

    插入值:

    INSERT time_db() VALUES('22:14:16');
    --   -2表示间隔了2两天
    INSERT time_db() VALUES('-2 22:14:16');
    -- 有冒号从小时开始
    INSERT time_db() VALUES('14:16');
    -- 没有冒号且没有天数则数据从秒开始
    INSERT time_db() VALUES('30');
    -- 有天数也从小时开始
    INSERT time_db() VALUES('3 10');
    -- 直接使用数字代替也可以
    INSERT time_db() VALUES(253621);
    

    这里写图片描述

    DATE

    创建表

    CREATE TABLE date_db(
    a DATE)
    

    插入数据

    INSERT date_db() VALUES(20180813);
    INSERT date_db() VALUES("2018-06-1");
    INSERT date_db() VALUES("2018-4-1");
    INSERT date_db() VALUES("2018-04-07");
    

    这里写图片描述

    DATETIME

    创建表

    CREATE TABLE datetime_db(
    a DATETIME
    )
    
    

    插入数据

    INSERT datetime_db() VALUES(20180102235432);
    INSERT datetime_db() VALUES("2015-04-21 21:14:32");
    INSERT datetime_db() VALUES("2015-04-23");
    

    这里写图片描述

    TIMESTAMP

    TIMESTAMP和DATETIME使用上差不多,但是范围相对较小。

    创建表

    CREATE TABLE timestamp_db(
    a TIMESTAMP
    )
    
    

    插入数据

    INSERT timestamp_db() VALUES(20020121);
    INSERT timestamp_db() VALUES(20020121142554);
    INSERT timestamp_db() VALUES("2015-12-16 21:14:15");
    INSERT timestamp_db() VALUES("2015-12-17");
    INSERT timestamp_db() VALUES(NULL);
    INSERT timestamp_db() VALUES(CURRENT_TIMESTAMP);
    INSERT timestamp_db() VALUES();
    

    这里写图片描述

    YEAR

    创建表

    CREATE TABLE year_db(
    a YEAR
    )
    

    插入数据

    INSERT year_db() VALUES("1993");
    INSERT year_db() VALUES(1993);
    

    这里写图片描述


    MySQL中的常用数据类型大概就这些,我们在建表的时候要选择合适的数据类型定义字段。

    下一篇:

    MySQL表数据的增删改(DML)


    如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

    展开全文
  • C51基本数据类型

    千次阅读 2019-12-19 13:42:36
    C51基本数据类型 C51中基本数据类型主要是指变量类型。变量是指其值可以改变的量。一个变量实质上是代表了内存中的某个存储单元。程序中的变量a,就是指用a命名的某个存储单元,用户对变量a进行的操作就是对该存储...
  • 西门子PLC内部的数据类型大全

    千次阅读 2021-01-31 10:38:06
    西门子PLC的数据类型种类繁多,本文进行了收集,并指明了适用范围、长度,供需要进行数据采集和分析的朋友们参考,本表格整理自博图V14,不保证更高级版本不会新增数据类型,请使用中注意。
  • JS数据类型之引用数据类型

    千次阅读 2019-06-28 16:46:51
    1、引用数据类型也就是对象数据类型object,比如:object、array、function、data等; 2、引用类型的值可以改变: let person = {name: 'lisa'} person.name = 'Jane' // 通过修改对象属性值更改对象 console....
  • python可变数据类型和不可变数据类型

    千次阅读 多人点赞 2019-01-06 23:44:46
    Python3可变数据类型与不可变数据类型 有很多人在刚开始接触 python 这个语言的时候,总是搞不清楚什么是 可变数据类型 什么是 不可变数据类型,今天就让我们通过这篇小文章来详细了解一下。 知识点目录: 1....
  • Hive支持关系型数据库中的大多数基本数据类型,同时支持关系型数据库中很少出现的3种集合数据类型,下面我们将简短地介绍一下这样做的原因。    其中一个需要考虑的因素就是这些数据类型是如何在文本文件中进行...
  • 2、查看列的数据类型 df.dtypes#查看所有列的数据类型 df['A'].dtypes#查看列名为"A"那列的数据类型 3、把列名为"A"的数据类型转换成int类型 df['A']= df['A'].astype('int') 注意:astype不是原地操作,需要重新...
  • java八种基本数据类型及包装类详解

    万次阅读 多人点赞 2018-12-20 10:14:40
    详解一、八种基本数据类型常识 1.1、基本常识表 对于上图有以下几点需要注意: java八种基本数据类型分为四类八种,四类分别为整型、浮点型、布尔型、字符型;八种分别为byte、short、int、long、float、double...
  • 在学习数据结构类型时,首先遇到的一个难点即是如何理解抽象数据结构类型。...抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。对一个抽象数据类型进行定义时,必须给出...
  • Java中八大基本数据类型详解

    万次阅读 2020-12-04 11:06:42
    自从Java发布以来,基本数据类型就是Java语言的一部分,分别是 byte, short, int, long, char, float, double, boolean .当然围绕着这些基本数据类型衍生出来了很多面试题,但是说实话,工作中基本用不到
  • Java 数据类型(基本数据类型、引用数据类型)

    千次阅读 多人点赞 2013-12-11 23:40:11
    Java 数据类型(基本数据类型、引用数据类型) 简单的介绍
  • SparkSql 数据类型转换

    万次阅读 2019-10-14 08:44:38
    SparkSql 数据类型转换1、SparkSql数据类型1.1数字类型1.2复杂类型2、Spark Sql数据类型和Scala数据类型对比3、Spark Sql数据类型转换案例3.1获取Column类3.2测试数据准备3.3spark入口代码3.4测试默认数据类型3.5把...
  • 一个变量可以存放两种类型的值,基本类型的值...它是 JavaScript 语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。 基本类型 ...
  • 基本数据类型和引用数据类型的区别

    千次阅读 多人点赞 2018-03-18 21:35:18
    javascript中基本数据类型和引用数据类型的区别1、基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成...
  • java基本数据类型范围

    万次阅读 2019-07-05 13:04:44
    1. 数据类型范围 整型: byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加B short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S 有符号int:-2^31 ~ 2^31-1,即-2147483648 ~ ...
  • SQL server 2008 定义数据类型

    万次阅读 2018-10-28 17:49:08
    1. 字符数据类型 字符数据类型包括varchar、char、nvarchar、nchar、text以及ntext。这些数据类型用于存储字符数据。varchar和char类型的主要区别是数据填充。如果有一表列名为FirstName且数据类型为varchar(20),...
  • 【Redis】五种数据类型及其使用场景

    万次阅读 多人点赞 2020-05-25 22:58:57
    Redis 数据类型 五种类型与类比java的模型 string --> String hash --> Hashmap list --> LinkList set --> HashSet sorted_set --> TreeSet String类型 redis 数据存储格式 redis自身是一个Map...
  • JavaScript基本数据类型

    万次阅读 2018-07-13 19:49:32
    JavaScript是弱类型脚本语言,声明变量时无需指定变量的数据类型。JavaScript变量的数据类型是解释时动态决定的。但是JavaScript的值保存在内存中,也是数据类型的。JavaScript基本数据类型有如下五个(1)数值类型...
  • Java 基本数据类型存储位置

    万次阅读 多人点赞 2018-11-05 10:48:13
    Java 基本数据类型 及 == 与 equals 方法的区别 转载地址:https://www.cnblogs.com/Latiny/p/8099581.html  Java数据类型分为基本数据类型与引用数据类型。    1 基本数据类型 byte:Java中最小的数据类型...
  • C语言数据类型

    万次阅读 多人点赞 2018-09-12 15:10:25
    数据类型包括原始类型、多元组、记录单元、代数数据类型、抽象数据类型、参考类型以及函数类型。本文主要以51单片机中的数据类型为中心而展开的话题。  在keil C51或者iar for c8051编译器下:  int 占两个字节 ...
  • 人们在使用计算机解决客观世界中存在的具体问题时,通常过程如下:首先通过对客观世界的认知形成印象和概念从而得到了信息,在此基础上... 数据结构主要与在上述过程中从建立概念模型到实现模型转化并为后续程序设...
  • postgresql系列之数据类型

    万次阅读 2018-11-18 22:42:28
    一、数字数据类型 1.1 数字类型列表: 类型名称 存储长度 描述 范围 smallint 2 bytes 小范围整数类型 -32768 to +32767 integer 4 bytes 整数类型 -2147483648 to +2147483647 bigint 8 bytes 大范围...
  • 关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确。希望能给大家带来点帮助。 如果有错误请指出。 来看下面例子: 复制代码 复制代码 //值类型 int ...
  • 数据处理之Pandas中数据类型转换

    千次阅读 2020-10-23 20:36:38
    Pandas中进行数据类型转换有三种基本方法: 使用astype()函数进行强制类型转换 自定义函数进行数据类型转换 使用Pandas提供的函数如to_numeric()、to_datetime() 举例数据 import numpy as np import pandas as pd...
  • sqlalchemy 常用数据类型有哪些?

    万次阅读 2018-08-09 16:45:47
     sqlalchemy常用数据类型 数据类型 python数据类型 说明 Integer int 整形 String str 字符串 Float float 浮点型 DECIMAL decimal.Decimal 定...
  • Integer 数据类型

    万次阅读 2018-01-20 22:19:50
    Integer 数据类型 简介 JavaScript 所有数字都保存成 64 位浮点数,这决定了整数的精确程度只能到 53 个二进制位。大于这个范围的整数,JavaScript 是无法精确表示的,这使得 JavaScript 不适合进行科学和金融...
  • python六种基本数据类型

    千次阅读 多人点赞 2020-07-17 10:57:51
    python六种基本数据类型 Python3 中有六个标准的数据类型: number(数字) string(字符串) tuple(元组) list(列表) set(集合) dictionary(字典) 前三种为不可变数据(不可变数据类型在第一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,853,907
精华内容 2,341,562
关键字:

数据类型