Java-Web学习-数据库-SQL数据类型

SQL数据类型

SQL支持多种数据类型,包括:

  • 字符数据类型:存储字符数据。
  • 精确数值数据类型:存储整数值或精确小数。
  • 近似数值数据类型:存储浮点数。
  • 二进制数据类型:存储二进制文件,包括图像、MP3等。
  • 日期和时间数据类型:存储日期、时间信息。
  • 其他系统数据类型:XML、Table等
  • CLR集成:公共语言运行库(Common Language Runtime),支持自定义自己的数据类型。

字符数据类型

SQL标准支持的字符数据类型包括:

  • varchar:varchar(n),当不满n个字符时则在物理上不填充,但有一定额外开销,一般来说,小于等于5字节的列应当存储为char类型而不是vchar类型。n处于1~8000之间,或用字符串"max"替换n,可支持到(2^{31}-1)个字符。
  • char:char(n),当不满n个字符时使用空格来填满n个字节。n处于1~8000之间。
  • nvarchar与nchar:对标varchar和char,但是每个字符对应两字节,以支持Unicode字符集。
  • text:在数据页之外存储大型字符数据(2GB),影响性能,尽量避免使用。
  • ntext:Unicode版本的text,一个字符占两个字节,最大到4GB。

精确数值数据类型

SQL标准支持的精确数值类型包括:

  • bit:占用一个字节,但是只能表示0、1、Null三者中的一个。
  • tinyint:占用一个字节,表示0~255之间的整数。
  • smallint:占用两个字节,表示 -32768~32767之间的整数。
  • int:占用四个字节,表示 -2147483648~2147483647之间的整数。
  • bight:占用八个字节,表示 -9223372036854775808~9223372036854775807之间的整数。
  • numeric(p,s)和decimal(p,s):占用最多17个字节,p表示Precision精度,对应总位数;s表示Scale规模,对应小数点右边的位数。比如114.514对应numeric(6,3)或decimal(6.3)。
  • money:占用八个字节,表示精确小数,-922337203685477.5808~922337203685477.5807之间的小数。
  • smallmoney:占用四个字节,表示精确小数, -214748.3648~214748.3647之间的整数。

近似数值数据类型

SQL标准支持的近似数值数据类型包括:

  • float(n):n表示存储尾数的位数,SQL中仅支持float(24)和float(53),默认缺省为53.
  • real:相当于float(24)。

二进制数据类型

SQL标准支持的二进制数据类型包括:

  • binary(n):n为1~8000,定长二进制。
  • varbinary(n):n为1~8000或用"max"字符串代替以拓展到2GB。会有额外开销(2字节)。
  • image:等同于varbinary(n),其在数据页外部存储,性能较差。

日期和数据数据类型

SQL标准支持的日期和时间数据类型包括:

  • date:1月1日~12月31日,占用3字节。
  • datetime:1753年1月1日~9999年12月31日之间的时间,精确到3.33毫秒,占用8字节。
  • datetime2(n):1月1日~12月31日之间的时间,n表示秒在小数点后的精确位数,根据n占用6~8字节。
  • datetimeoffset(n):datetime2的附带时区偏移量的版本,支持+/-14小时的偏移量。
  • smalldatetime:1900年1月1日~2079年6月6日,精确到1分钟,占用4字节。
  • time(n):表示某小时某分钟某秒,n表示秒在小数点后的精确位数,占用3~5字节。

其他系统数据类型

SQL还支持一些其他的数据类型,这里只介绍:

  • timestamp:相当于binary(8),每个表只能有一个timestamp列。每次更新或插入一个含有timestamp列的行时,该行的timestamp值将自动被更新为一个计数值。注意这个值只是一个整数而不代表时间。注意,该类型在某些语言中被解析为byte[]类型。
  • uniqueidentifier:全局唯一标识符(GUID),占用16字节,调用SQL中的newid()函数生成,使得其在世界上保持唯一。通常用于多台计算机的网络中。必须指定newid函数的DEFAULT子句,或使用newid函数进行INSERT。

CLR集成

集成CLR使得SQL支持我们添加UDT(用户定义类型),我们需要使用托管代码编写类、创建程序集,然后利用CREATE TYPE 语句在SQL Server中注册该UDT。

[SqlUserDefinedTypeAttribute(Format.Native)]
public struct SimpleUdt: INullable
{
   public override string ToString() {...}
   public bool IsNull { get; }
   public static SimpleUdt Null { get; }
   public static SimpleUdt Parse(SqlString s) {...}
}
create type simpleudt from [myclr].[SimpleUdt]
原文地址:https://www.cnblogs.com/Nortonary/p/14816870.html