一,C#中预定义的值类型
A、整型
sbyte ,8位有符号的整数,范围从 -128到127.
byte ,8位无符号的整数,范围从 0到255.
short,16位有符号的整数,范围从 -32768到32767
ushort ,16位无符号的整数,范围从0到65535
int,32位有符号的整数,范围从-2147483648到2147483647
uint,32位无符号的整数,范围从0到4294967295
long,64位有符号的整数,范围从-2的31次方到2的31次方减1
ulong,64位无符号的整数,范围从0到2的64次方减1
B、浮点类型。
float ,32位单精度浮点数。
double,64位双精度浮点数。
如果代码对某个非整数值,如12.3硬编码,则编译器一般假定该变量是double,如果想指定其为float,则可以在后面加上字符f。
C、decimal类型。
该类型是一种财务专用数据类型,是128位高精度十进制表示法。
要把数据指定为decimal类型的,只需在数字后面加上M(或者m)
D、 bool类型。
C#的bool类型包含true和false。
E、 字符类型。
也就是char类型,表示一个16位的unicode字符。
char类型的字面量是采用 单引号 括起来的。而不是双引号。双引号括起来的是字符串类型的。
二,T-SQL中的数据类型
在 SQL Server 中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。SQL Server中的数据类型有整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等。
从大的方面来说SQL Server包括系统和用户自定义两种数据类型。 系统数据类型集定义了可与 SQL Server 一起使用的所有数据类型。还可以使用 T-SQL 或 Microsoft .NET Framework 定义自己的数据类型。用户定义的数据类型基于系统提供的数据类型,可以从.NET Framework 支持的编程语言创建的类的方法和运算符中获取它们的特征。
当两个具有不同数据类型的表达式通过运算符进行组合时,结果的特征遵循以下原则。
● 结果的数据类型是通过将数据类型的优先顺序规则应用到输入表达式的数据类型来确定的。有关详细信息,请参阅数据类型优先级 (T-SQL)。
● 结果数据类型为 char、varchar、text、nchar、nvarchar 或 ntext 时,结果的排序规则由排序规则的优先顺序规则确定。
● 结果的精度、小数位数及长度取决于输入表达式的精度、小数位数及长度。
● SQL Server 2005 提供了数据类型同义词以保持 SQL-92 兼容性。SQL Server中的数据类型可以归纳为下面几大类:精确数字数据类型、近似数字数据类型、日期和时间数据类型、字符串数据类型、大值数据类型、大对象数据类型。
1. 精确数字数据类型
精确数字数据类型包括bigint、int、smallint、tinyint、big、money和smallmoney。详细内容如表2-3所示。
表2-3 精确数字数据类型
数据类型名称 | 取 值 范 围 | 存 储 |
bigint | –263 (–9 223 372 036 854 775 808)~ | 8 字节 |
int | –231 (–2 147 483 648)~ 231–1(2 147 483 647) | 4 字节 |
smallint | –215 (–32 768)~215–1 (32 767) | 2 字节 |
tinyint | 0~255 | 1 字节 |
bit | 可以取值为 1、0 或 NULL 的整数数据类型 | 如果表中的列为 8 bit 或更少,则这些列作为 1 个字节存储。如果列为 9 到 16 bit,则这些列作为 2 个字节存储,以此类推 |
money | –9 223 372 036 854 775 808~9 223 372 036 854 77 5 807 | 8 字节 |
smallmoney | -2 147 483 648~2 147 483 647 | 4 字节 |
int 数据类型是 SQL Server 2005 中的主要整数数据类型。bigint 数据类型用于整数值可能超过 int 数据类型支持范围的情况。
在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间。
只有当参数表达式为 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其他整数数据类型(tinyint、smallint 和 int)提升为 bigint。
注意:
字符串值 TRUE 和 FALSE 可以转换为bit 值,TRUE 转换为 1,FALSE 转换为 0。除了上面几种数据类型外,还有两个表示带固定精度和小数位数的数值数据类型decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )]。
其中p代表精度,最多可以存储十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
S代表小数位数,小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。
2. 近似数字数据类型
近似数字数据类型包括float和real,用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。
注意:
real 的 SQL-92 同义词为 float(24)。关于float和real的详细解释如表2-4所示。
表2-4 近似数字数据类型
数据类型名称
取 值 范 围
存 储
float[(n)]
–1.79E + 308~–2.23E–308、0 以及 2.23E–308~1.79E + 308
取决于 n 的值
real
–3.40E + 38~–1.18E–38、0 以及 1.18E–38~3.40E + 38
4字节
float [ ( n ) ] ,其中 n 为用于存储 float 数值尾数的位数,以科学记数法表示,因此可以确定精度和存储大小。如果指定了 n,则它必须是介于 1 和 53 之间的某个值。n 的默认值为 53
3. 日期和时间数据类型
日期和时间数据类型用于表示某天的日期和时间。包括datetime 与 smalldatetime。详细信息如表2-5所示。
表2-5 日期和时间数据类型
数据类型名称
取 值 范 围
精 确 度
datetime
1753 年 1 月 1 日~ 9999 年 12 月 31 日
1753 年 1 月 1 日~ 9999 年 12 月 31 日
smalldatetime
1900 年 1 月 1 日~ 2079 年 6 月 6 日
1 分钟
SQL Server 2005 数据库引擎用两个4字节的整数内部存储 datetime 数据类型的值。第一个4字节存储“基础日期”(即 1900 年1月1日)之前或之后的天数。基础日期是系统参照日期。另外一个4字节存储天的时间,以午夜后经过的1/300秒数表示。
smalldatetime 数据类型存储天的日期和时间,但精确度低于 datetime。数据库引擎将 smalldatetime 值存储为两个2字节的整数。第一个2字节存储1900年1月1日后的天数。另外一个2字节存储午夜后经过的分钟数。
4. 字符串数据类型
字符串数据类型包括3种,分别为Unicode字符串数据类型、非Unicode字符串数据类型和二进制字符串数据类型。下面分别进行介绍。
非Unicode字符串包括3种具体数据类型,详细内容如表2-6所示。
表2-6 非unicode字符串数据类型
数据类型名称
解 释
char [ ( n ) ]
固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1~8000,存储大小是 n 个字节
varchar [ ( n | max ) ]
可变长度,非 Unicode 字符数据。n 的取值范围为 1~8000。max 指示最大存储大小是231–1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符
text
服务器代码页中长度可变的非 Unicode 数据,最大长度为 231–1 (2,147,483,647) 个字符
如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时未指定 n,则默认长度为 30。
关于在何种情况下使用char或nchar,SQL Server 2005中列出了下列几个原则。
● 如果列数据项的大小一致,则使用char。
● 如果列数据项的大小差异相当大,则使用 varchar。
● 如果列数据项大小相差很大,而且大小可能超过8000字节,请使用 varchar(max)。Unicode字符串包括3种具体数据类型,详细内容如表2-7所示。
表2-7 Unicode字符串数据类型
数据类型名称
解 释
nchar [ ( n ) ]
n 个字符的固定长度的 Unicode 字符数据。n 值为1~4000,存储大小为两倍 n 字节
nvarchar [ ( n | max ) ]
可变长度 Unicode 字符数据。n 值为1~4000。max 指示最大存储大小为231–1字节。存储大小是所输入字符个数的两倍加2个字节。所输入数据的长度可以为 0 个字符
ntext
长度可变的 Unicode 数据,最大长度为 230–1 (1 073 741 823)个字符。存储大小是所输入字符个数的两倍(以字节为单位)
注意:
关于何时使用nchar和nvarchar,其遵守的原则与非Unicode字符串的原则基本相同。二进制字符串数据类型包括3种具体数据类型,详细内容如表2-8所示。
表2-8 二进制字符串数据类型
数据类型名称
解 释
binary [ ( n ) ]
长度为 n 字节的固定长度二进制数据,其中 n为1~8000 的值。存储大小为 n 字节
varbinary [ ( n | max ) ]
可变长度二进制数据。n为1~8000 的值。max 指示最大的存储大小为231–1字节。存储大小为所输入数据的实际长度加2 个字节。所输入数据的长度可以是 0 字节
image
长度可变的二进制数据,为从0~231–1 (2 147 483 647) 个字节
在使用binary和varbinary时应遵循下列规则。
● 如果列数据项的大小一致,则使用binary。
● 如果列数据项的大小差异相当大,则使用varbinary。
● 当列数据条目超出8000 字节时,请使用varbinary(max)。
5. 大值数据类型
大值数据类型包括varchar(max)、nvarchar(max) 和 varbinary(max)。这几种数据类型并不是常用的数据类型,因此这里不作详细讲解。
6. 大对象数据类型
大对象数据类型包括text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max) 和 xml。
除了上面介绍的几种数据类型外,还有几种特殊的数据类型,如cursor、sql_variant、table等,这里不作介绍,有兴趣的读者可参见SQL Server 2005的相关文档。