SQL数据类型汇总
            
                发布时间:2024-04-04 10:30:01
            
            数据类型用来指明存储在表中的数据的性质。例如,在表的某一列中,如果我们想存储字符串,那么就必须将该字段声明为字符串类型。
在 SQL 中,每个字段、变量和表达式都有特定的数据类型,您可以在创建表时指明字段的类型,也可以根据需要随时修改字段的类型。
大部分数据库都支持以下 4 种类别的基本数据类型:
	- 
		字符串类型
 
	- 
		数值类型(整数+小数)
 
	- 
		日期时间类型
 
	- 
		二进制类型
 
本教程以 MySQL 8.0 为例讲解 SQL 数据类型,其它数据库支持的数据类型与 MySQL 大体类似,但是细节(例如数据类型的名称、数据类型的大小等)有所差别。
	MySQL 数据类型
	
		字符串类型
	
		
			| 
				类型 | 
			
				说明 | 
		
		
			| 
				CHAR(size) | 
			
				用于表示固定长度的字符串,该字符串可以包含数字、字母和特殊字符。size 的大小可以是从 0 到 255 个字符,默认值为 1。 | 
		
		
			| 
				VARCHAR(size) | 
			
				用于表示可变长度的字符串,该字符串可以包含数字、字母和特殊字符。size 的大小可以是从 0 到 65535 个字符。 | 
		
		
			| 
				TINYTEXT | 
			
				表示一个最大长度为 255(28-1)的字符串文本。 | 
		
		
			| 
				TEXT(size) | 
			
				表示一个最大长度为 65,535(216-1)的字符串文本,也即 64KB。 | 
		
		
			| 
				MEDIUMTEXT | 
			
				表示一个最大长度为 16,777,215(224-1)的字符串文本,也即 16MB。 | 
		
		
			| 
				LONGTEXT | 
			
				表示一个最大长度为 4,294,967,295(232-1)的字符串文本,也即 4GB。 | 
		
		
			| 
				ENUM(val1, val2, val3,...) | 
			
				字符串枚举类型,最多可以包含 65,535 个枚举值。插入的数据必须位于列表中,并且只能命中其中一个值;如果不在,将插入一个空值。 | 
		
		
			| 
				SET( val1,val2,val3,....) | 
			
				字符串集合类型,最多可以列出 64 个值。插入的数据可以命中其中的一个或者多个值,如果没有命中,将插入一个空值。 | 
		
	
说明:ENUM 类型相当于单选题,SET 类型相当于多选题。
	
		整数类型
	
		
			| 
				类型 | 
			
				大小(字节) | 
			
				有符号数取值范围 | 
			
				无符号数取值范围 | 
			
				说明 | 
		
		
			| 
				TINYINT | 
			
				1 | 
			
				(-128, 127) | 
			
				(0, 255) | 
			
				超小整数 | 
		
		
			| 
				SMALLINT | 
			
				2 | 
			
				(-32 768, 32 767) | 
			
				(0, 65 535) | 
			
				小整数 | 
		
		
			| 
				MEDIUMINT | 
			
				3 | 
			
				(-8 388 608, 8 388 607) | 
			
				(0, 16 777 215) | 
			
				中等整数 | 
		
		
			| 
				INT 或 INTEGER | 
			
				4 | 
			
				(-2 147 483 648, 2 147 483 647) | 
			
				(0, 4 294 967 295) | 
			
				整数 | 
		
		
			| 
				BIGINT | 
			
				8 | 
			
				(-263, 263-1) | 
			
				(0, 264-1) | 
			
				大整数 | 
		
		
			| 
				类型 | 
			
				说明 | 
		
		
			| 
				BOOL | 
			
				布尔类型,只有 true 和 false 两个有效值;零值被认为是 false,非零值被认为是 true。 
				 
				注意,MySQL 并不真正支持 BOOL 类型,BOOL 是 TINYINT(1) 的别名。 | 
		
	
	
		小数类型
	
		
			| 
				类型 | 
			
				分类 | 
			
				说明 | 
		
		
			| 
				FLOAT(size, d) | 
			
				浮点数(近似值) | 
			
				单精度浮点数类型,4 个字节大小。size 参数用来指定数字的总个数,d 参数用来指定小数部分(小数点后边)的数字个数。 | 
		
		
			| 
				FLOAT(p) | 
			
				单精度浮点数类型,参数 p 用来决定使用 FLOAT 类型还是 DOUBLE 类型:
				
					- 
						如果 p 的取值介于 0 和 24 之间,那么数据类型将变成 FLOAT();
 
					- 
						如果 p 的取值介于 25 和 53 之间,那么数据类型将变成 DOUBLE()。
 
				 
			 | 
		
		
			| 
				DOUBLE(size, d) | 
			
				双精度浮点数类型,size 参数用来指定数字的总个数,d 参数用来指定小数部分(小数点后边)的数字个数。 | 
		
		
			| 
				DECIMAL(size, d) | 
			
				定点数(精确值) | 
			
				定点数类型,size 参数用来指定数字的总个数,d 参数用来指定小数部分(小数点后边)的数字个数。size 的最大值是 65,默认值是 10;d 的最大取值是 30,默认值是 0。 | 
		
		
			| 
				DEC(size, d) | 
			
				等价于 DECIMAL(size, d)。 | 
		
	
	
		日期时间类型
	
		
			| 
				类型 | 
			
				说明 | 
		
		
			| 
				DATE | 
			
				日期类型,格式为 YYYY-MM-DD,取值范围从 '1000-01-01' 到 '9999-12-31'。 | 
		
		
			| 
				DATETIME(fsp) | 
			
				日期和时间类型,格式为 YYYY-MM-DD hh:mm:ss,取值范围从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。 | 
		
		
			| 
				TIMESTAMP(fsp) | 
			
				时间戳类型,它存储的值为从 Unix 纪元('1970-01-01 00:00:00' UTC)到现在的秒数。TIMESTAMP 的格式为 YYYY-MM-DD hh:mm:ss,取值范围从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC。 | 
		
		
			| 
				TIME(fsp) | 
			
				时间类型,格式为 hh:mm:ss,取值范围从 '-838:59:59' 到 '838:59:59'。 | 
		
		
			| 
				YEAR | 
			
				四位数字的年份格式,允许使用从 1901 到 2155 之间的四位数字的年份。此外,还有一个特殊的取值,就是 0000。 | 
		
	
	
		二进制类型
	
		
			| 
				类型 | 
			
				说明 | 
		
		
			| 
				BIT(size) | 
			
				二进制位(Bit)类型,位数由 size 参数指定;size 的大小从 1 到 64,默认值为 1。 | 
		
		
			| 
				BINARY(Size) | 
			
				等价于 CHAR() 类型,但是存储的是二进制形式的字节串。size 参数以字节(Byte)为单位指定列的长度,默认值为1。 | 
		
		
			| 
				VARBINARY(Size) | 
			
				等价于 VARCHAR() 类型,但是存储的是二进制形式的字节串。size 参数以字节(Byte)为单位指定列的最大长度。 | 
		
		
			| 
				TINYBLOB | 
			
				存储较小的二进制数据,最多可容纳 255 (28-1)个字节。 | 
		
		
			| 
				BLOB(size) | 
			
				用来储存二进制数据,最多可以容纳 65,535(216-1)个字节,也即 64KB。 | 
		
		
			| 
				MEDIUMBLOB | 
			
				存储中等大小的二进制数据,最多可以容纳 16,777,215(224-1)字节,也即 16MB。 | 
		
		
			| 
				LONGBLOB | 
			
				存储较大的二进制数据,最多可容纳 42,94,967,295(232-1)字节,也即 4GB。 | 
		
	
说明:BLOB 是 Binary Large Objects 的缩写,译为“大型二进制对象”,也即二进制数据块。