Posts data type
Post
Cancel

data type

data type

数据本质上是一串连续的字节,或者安装一个数据结构存放的字节。数据库的数据类型,一般可以分为字符串,数字,以及日期。字符串很好理解,就是一串连续字节,通过其长度约束,一般又可以分为定长和变长。数字其实可以理解为定长特定组合(如内容全是0-9)的字符串,根据其定长又可以分为 Int,bigint,float等。日期事件类型又是一种特殊类型的数字,比如大多数时间均可以表示计算机元年(epoch time)的偏移秒数。让我们来看一下这3种类型一般的情况:

string data types

The string data types are CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, and SET.

定长字符串

定长字符串通常具有相同的长度,是使用定长数据类型保存的。在定长数据类型里,通常使用空格来填充不足的字符,char就属于定长字符串。比如:char(10) 如果字段长度是10,而输入的数据只有5位,那么剩余的5位就会被记录为空格,使用空格填充,填充空格确保了字段里每个值都具有相同的长度,如果插入字符数据超过设定长度,则会被截取下来,多余的存不进去。

变长字符串

也就是长度不固定的字符串。如varchar。定长数据类型利用空格来填充字段里的空白,但变长字符串不这样做。举例来说,如果某个变长字段的长度定义为10,而输入的字符串长度为5,那么这个值的总长度也就是5,这时并不会使用空格来填充字段里的空白。

LOB

对于特别长的字符串(一般char或者varchar 不同数据库都会有上限长度,一般会考虑整个row size进行限制),如果数据库要存储,一般会使用LOB类型,这种类型的数据在实际存放时,会单独存放到一块存储区域,从而降低row scan的影响。 一般会根据LOB内容进行区分为BLOB和CLOB,也就是存放的是二进制还是纯字符串。

date data type

一般数据库都会有

简单的日期(DATE)、时间类型(TIME),和混合日期和时间(DATETIME)这几种类型,还有不太常用的 with timezone的类型。

在某次ANSI标准更新后,现在也有了interval 时间类型,区别于以上时间类型(都是时间点),interval表达的是一个时间段

number data type

数字类型一般又可以分为 整形,浮点型,精确小数等类型

整数

顾名思义,就是仅包含整数,如32位的INT,64位的BIGINT,大家可以根据其位数自行计算其上下限。

浮点数

一般分为float和double,它们的精度都有限。在计算机科学中,一般float的精度是6-7位,double是15-16位。它们的主要用途是用来表示特别大的数字,比如double可以表达 -1.79E+308 ~ +1.79E+308。

浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)

精确小数

一般数据库都会叫做 decimal(m,n).不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数。Decimal属于精确小数类型。decimal 类型具有更高的精度和更小的范围,它适合于财务和货币计算。

Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。例decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。

​ 当然随着技术的发展,现在有很多符合类型数据,比如 set,json,avro等。这里就不一一展开,各位可以通过不同数据库具体的manual进行了解

data literally

​ 我单独列一个章节叫做 literal,是因为这个表述其实翻译不太准确,大概的意思就是各种数据类型的字面表达。

​ 我们知道data type一般用在我建表,修改表结构等用途,表达数据的样式和规范。当我们执行insert-select的时候,也往往会在数据库内进行data type的兼容,转换等。但是有一类情况,是我们必须在SQL 明文中写出各种数据类型的字面表达的时候,就有必要搞清楚各种data type的 literal写法。

string

1
'string' 

字符串一般使用成对的单引号进行表达,其中内部的内容就是你想写的字符串

根据不同的数据库你可以增加一些修饰(比如设定字符集,大小写敏感等)

转义

当然如果字符串本身就含有’单引号时,一般都会使用反斜线\来进行表述,如

>'MariaDB\'s new features'

这里需要说的是,有些情况需要使用ascii码或者十六进制来表达的某些字符,在不同的数据库上有不同的写法。

如mysql的

Hexadecimal literal values are written using X’val’ or 0xval notation, where val contains hexadecimal digits (0..9, A..F).

X’01AF’

number

使用连续的数字和点来表达数字,如:1, .2, 3.4, -5, -6.78, +9.10.

使用指数E来表达浮点数,如:1.2E3, 1.2E-3, -1.2E3, -1.2E-3.

date

在不同的数据库,对于日期类型的表达方式都有不同的兼容方案,但是我最推荐的还是

‘YYYY-MM-DD HH24:MI:SS’这种写法,这是适用范围最广的写法,如:

‘2015-07-21’,’2012-12-31 11:30:45’,

在标准SQL中,要求 在表达日期的字符串前面增加前导关键字,如

DATE ‘str’

TIME ‘str’

TIMESTAMP ‘str’

boolean

The constants TRUE and FALSE evaluate to 1 and 0, respectively. The constant names can be written in any lettercase.

SELECT TRUE, true, FALSE, false;

注意 TURE,fales不需要 引号,否则就变成了字符串

NULL

null是数据库中最容易被人忽略的导致错误的点。

The NULL value means “no data.” NULL can be written in any lettercase.

表达NULL就直接使用 NULL或者null即可。外围包上引号只会导致它变为字符串’NULL’

记住一句重要的话:null和任何东西运算的结果是null,如果是逻辑运算,结果就是false。

空串

人们一般吧字节长度为0的字符串叫做空串,虽然这样表述很没意思,但是有些数据库就是允许空串存在,空串是一种特殊的字符串’‘。 在大多数数据库内,空串 是不等价于 NULL的。

非空的含义一般是指非null,而非 是指 非空串。

This post is licensed under CC BY 4.0 by the author.