我们知道MySQL支持大量的列类型,每种类型都有特定的用处,擅长用各种贴合实际的类型不仅能大量节省数据库占用的空间,对于后续的查询、储存、维护都会带来极大的便利。因此,本次会对mysql中可用类型的作一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。
1、bit
bit属于位字段类型,其范围是1~64,如果不指定值默认为1,当bit(1)时其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如yes/no、true/false 、on/off。
当bit(value)的value值大于1时则以二进制存储,存储时如下:
注意:bit是一种很省空间的数据类型,如果能够满足需求应该尽量多用。另外在插入时,如果是true/false会被自动转换成1/0,查询时会返回1/0。
2、tinyint整型
tinyint数据类型能存储从0~255 之间的整数,如果tinyint添加了无符号(unsigned)属性,则范围变成-128~+127。如果你只打算存储有限数目的数值时建议使用tinyint,这种数据类型在数据库中占用1 个字节.
注意:tinyint相对是比较安全的,不接受恶意脚本内容的嵌入。
3、smallint整型
smallint 数据类型带符号的范围是-32768到32767,无符号的范围是0到65535。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间.
注意:smallint型相对也是比较安全的,不接受恶意脚本内容的嵌入。
4、int整型
int 数据类型带符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节。
注意:int是数据库常用的字段。推荐使用
5、decimal精确数值
decimal[(M,[D])] 或者数据类型能用来存储从-10的38次幂-1到10的38次幂-1的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 由M(整个数字的长度,包括小数点,小数点左边的位数,小数点右边的位数,但不包括负号)和D(小数点右边的位数)来决定,M缺省为10,D缺省为0。
6、numeric精确数值
numeric(M,D)数据类型与decimal 相似。
7、smallmoney货币型
smallmoney 数据类型用来表示钱和货币值。这种数据类型能存储从-214748.3648 到214748.3647 之间的数据,精确到货币单位的万分之一。
8、money货币型
money数据类型用来表示钱和货币值。这种数据类型能存储从-9220亿到9220 亿之间的数据,精确到货币单位的万分之一 。
9、float近似数值型
float 数据类型是一种近似数值类型,供浮点数使用。说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308到1.79E+308 之间的任意数。
10、real近似数值型
real 数据类型像浮点数一样,是近似数值类型。它可以表示数值在-3.40E+38到3.40E+38之间的浮点数。
11、date时间类型
date时间数据类型来表示日期和时间。这种数据类型存储数据格式为:YYYY-MM-DD,它支持的范围为'1000-01-01'到'9999-12-31',并且允许使用字符串或数字为此列复制。
12、datetime日期时间类型
datetime数据类型用来表示日期和时间。它的存储格式为:YYYY-MM-DD HH:MM:SS,它支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59',并且允许使用字符串或数字进行分配值, 精确到三百分之一秒或3.33毫秒 。
13、timestamp特殊数据类型
timestamp 数据类型是一种特殊的数据类型,他是一个时间戳,用来创建一个数据库范围内的唯一数码。 它支持的范围是1970-01-01 00:00:00到2037年,一个表中只能有一个timestamp列。每次插入或修改一行时,timestamp列的值都会改变。尽管它的名字中有“time”, 但timestamp列不是人们可识别的日期。在一个数据库里,timestamp值是唯一的。
注意:
如果插入的时间小于1970-01-01 00:00:00即19700101000000,会抛出[Error Code: 1292, SQL State: 22001] Data truncation: Incorrect datetime value: '10831212121212' for column 'crt_date' at row 1。
如果插入的时间大于2037年,则会抛出 [Error Code: 1292, SQL State: 22001] Data truncation: Incorrect datetime value: '20381212121212' for column 'crt_date' at row 1。
14、time时间类型
time数据类型用来表示日期和时间,他以'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分会因为大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。
15、year年类型
year用来表示年,他以YYYY格式检索和显示year值,范围是1901到2155,支持2/4位标准值
year在不同类型中的值不同:
- 四位字符串,范围为'1901'到'2155'。
- 四位数字,范围为1901到2155。
- 两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的year值。
- 两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的year值。请注意两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。你必须将它指定为一个字符串'0'或'00'或它被解释为0000。
注意:函数返回的结果,其值适合year上下文,例如now()。
非法year值被转换为0000。
16、smalldatetime日期时间类型
smalldatetime 数据类型用来表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟 。
17、cursor特殊数据类型
cursor 数据类型是一种特殊的数据类型,它包含一个对游标的引用。这种数据类型用在存储过程中,而且创建表时不能用。
18、Uniqueidentifier特殊数据类型
Uniqueidentifier数据类型用来存储一个全局唯一标识符,即GUID。GUID确实是全局唯一的。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID 函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列 。
19、char字符型
char数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列为此类型时,你必须指定列长。当你总能知道要存储的数据的长度时,此数据类型很有用。例如,当你按邮政编码加4个字符格式来存储数据时,你知道总要用到10个字符。此数据类型的列宽最大为8000 个字符。
20、varchar字符型
varchar数据类型,同char类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。当定义一列为该数据类型时,你要指定该列的最大长度。 它与char数据类型最大的区别是,存储的长度不是列长,而是数据的长度。
21、text字符型
text 数据类型用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231-1或20亿个字符。
22、字符数据类型Char,Varchar 和 Text比较
字符数据的类型包括 Char,Varchar 和 Text。
字符数据是由任何字母、符号和数字任意组合而成的数据。
Varchar 是变长字符数据,其长度不超过 8KB。Char是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。
23、nchar统一编码字符型
nchar 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,而不是用单字节(普通文本中的情况)。它允许大量的扩展字符。此数据类型能存储4000种字符,使用的字节空间上增加了一倍。
24、nvarchar统一编码字符型
nvarchar 数据类型用作变长的统一编码字符型数据。此数据类型能存储4000种字符,使用的字节空间增加了一倍。
25、ntext 统一编码字符型
ntext 数据类型用来存储大量的统一编码字符型数据。这种数据类型能存储230 -1或将近10亿个字符,且使用的字节空间增加了一倍。
26、binary 二进制数据类型
binary数据类型用来存储可达8000 字节长的定长的二进制数据。当输入表的内容接近相同的长度时,你应该使用这种数据类型。
27、varbinary二进制数据类型
varbinary数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,你应该使用这种数据类型。
28、image二进制数据类型
image数据类型用来存储变长的二进制数据,最大可达231-1或大约20亿字节。
29、二进制数据类型binary、varbinary、image比较
二进制数据包括 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 数据类型中。
30、enum枚举数据类型
enum,实现将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。
枚举的使用方式
定义:enum(可能出现的元素列表); //如enum(‘男’,‘女’)
使用:存储数据,只能存储上面定义好的数据
意义在于:
1, 限定值的可能性!
2, 速度快,比普通的字符串速度快!
原因是枚举型 是利用 整数进行管理的,能够2个字节进行管理!
每个值,都是一个整数标识,从第一个选项开始为1,逐一递增!
管理时整数的形式,速度比字符串快!
一共有2 个字节,0-65535,因此可以有 65535个选项可以使用!
创建示例:
create table my_enum(
gender enum('男','女','保密')
)charset utf8;
作用之一:规范数据格式,数据只能是规定的数据中的其中一个
作用之二:节省存储空间(枚举通常有一个别名:单选框),枚举实际存储的是数值,而不是字符串本身
在mysql中,系统也是自动转换格式的,而且基本与PHP一样(尤其是字符串转数字)
插入方式:
insert into my_enum values('男'),('保密');
insert into my_enum values (‘1’),(‘2’),(‘3’),(‘1’+’2’);
注意:插入为数字时索引从1开始,不是0
枚举原理:枚举在进行数据规范的时候(定义的时候),系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中);然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统就自动将数字转换成字符串显示。
31、Unicode数据类型Char,Varchar 和 Text比较
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 个字符。
32、日期和时间数据类型Datetime、Smalldatetime比较
日期和时间数据类型包括 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 之后,日期的格式为日 月 年形式。