转自:
http://hi.baidu.com/heihei_shaweiwei/blog/item/b3af401e21be2e70f724e4d2.html
在数据库设计时我们常常为数据类型而烦恼,但是当你熟悉了之后就不再烦恼了,看看吧,看看对你有没有帮助。
char,varchar,text ,nchar,nvarchar,ntext 等学习拾遗,我自己收藏的啊!
看过这篇文章,主要是给大家给两个建议:
第一个建议:
微软可能会后续的SQL Server版本中移除text类型,所以从现在就应该用varchar(max) 来代替text、 用nvarchar(max)代替ntext,用binary(max)代替image. 为XML数据选择xml类型。
第二个建议:
在字段为字符串并且比较多小的时候,如果字符串全部是汉字,建议使用Nvachar,如果既有字母又有汉字并且字母偏多的话,建议使用Char或者Varchar。
接下来大家可以详细看一下:
1、varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。
2、nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。
比如:两字段分别有字段值:我和coffee ,那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。 如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar 。
3、关于他们的存储效率:
char varchar text nchar nvarchar ntext
最大存储量(byte): 8000 8000 2E31-1 8000 8000 2E31-1
编码: 非unicode 非unicode 非unicode unicode unicode unicode
存储效率: 较高 较低 较低 较高 较低 较低
最大英文数: 8000 8000 2E31-1 4000 4000 2E30-1
最大中文数: 4000 4000 2E30-1 4000 4000 2E30-1
通过上面的表可以看出:
①char 和varchar之间的差别和nchar及nvarchar之间的差别相同,char 和 nchar是定长的,而varchar和nvarchar是可变长的;不带n的存储非unicode字符,也就是英文字符占一个字节,中文字符占两个字节,相同容量,中文字符个数只有英文字符个数的一半,带n 的存储unicode字符,不管中文英文统统2个字节存储一个字符。
②关于效率方面,定长的要比不定长的高,text和ntext也是不定长的。
4、用varchar(max)代替text。
varchar的最大长度为8000,但是varchar(max)则可以存储多达2G的数据,因此其作用相当于SQL 2000中的text。但是微软可能会后续的SQL Server版本中移除text类型,从现在就应该用varchar(max) 来代替text。 用nvarchar(max)代替ntext,用binary(max)代替image. 为XML数据选择xml类型。在SQL Server 2005中,为XML数据添加了相应的数据类型,因此存储XML数据的列不需要用 varchar(max)或nvarchar(max),而应当用xml数据类型,以利用T-SQL中专门针对xml数据列的新命令,以及针对xml列的索引。
易混淆的数据类型
(1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。 text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
后面三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
(2)datetime和smalldatetime
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
(3)bitint、int、smallint、tinyint和bit
bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。
int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。
tinyint:从0到255的整数数据。
bit:1或0的整数数据。
(4)decimal和numeric
这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
Decimal为SQL Server 数据类型,属于浮点数类型。存储数据范围是:-1038~1038-1 的固定精度和小数位的数字。一个decimal类型的数据占用了2~17个字节。
Decimal 数据类型Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。注意 此时,Decimal 数据类型只能在 Variant中使用,也就是说,不能声明一变量为 Decimal 的类型。不过可用 Cdec 函数,创建一个子类型为 Decimal 的 Variant。 这样就对了。
Decimal数据类型可以在powerBuilder中使用。直接在编写控件的时候使用就可以了。比如:当编写一个Clicked事件脚本时就可以decimal r这样使用。
Decimal数据类型可以在Visual Studio编辑器中使用,只要在一个浮点类型的值后加一个大写或小写的M,则编辑器会认为这个浮点类型的值是一个Decimal类型。这种128位高精度十进制数表示法通常用在财务计算中。要注意的是,在.NET环境中,计算该类型的值会有性能上的损失,因为它不是基本类型。
decimal[ (p[ , s] )] and numeric[ (p[ , s] )]
固定有效位数和小数位数的数字。当使用最大有效位数时,有效值是从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义字是 dec 和 dec(p, s)。numeric 的功能相当於 decimal。
p (有效位数)
可储存的最大十进位数总数,小数点左右两侧都包括在内。有效位数必须是 1 至最大有效位数 38 之间的值。预设有效位数是 18。
s (小数位数)
小数点右侧所能储存的最大十进位数。小数位数必须是从 0 到 p 的值。只有在指定了有效位数时,才能指定小数位数。预设小数位数是 0;因此,0 <= s <= p。最大储存体大小会随著有效位数而不同。
例:
decimal(2,1),有效长度为2,小数位占1位。
此时,插入数据“12.3”、“12”等会出现“数据溢出错误”的异常;插入“1.23”或“1.2345...”会自动四舍五入成“1.2”;插入“2”会自动补成“2.0”,以确保2位的有效长度,其中包含1位小数。
(5)float和real
float:从-1.79^308到1.79^308之间的浮点数字数据。
real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。
分享到:
相关推荐
SQL Server 2005 数据类型是数据库设计的基础,它决定了数据如何被存储和处理。在SQL Server 2005中,数据类型分为两大类:字符串数据类型和数值数据类型。 1. 字符串数据类型: - `char`: 定长字符串,存储1到...
对于字符类型的字段,SQL Server 提供了 `char`、`varchar`、`nchar` 和 `nvarchar` 这四种常见的类型。下面我们将详细介绍这四种类型的特点及其适用场景。 #### 1. 定长 vs 变长 - **CHAR**: 是一种定长字符串...
- **Nchar[(n)]**、**Nvarchar[(n)]**、**Ntext**:这些数据类型专门用于处理Unicode字符数据,与对应的非Unicode版本相比,它们每个字符占用的空间更大(2个字节而不是1个字节),但能够支持更广泛的字符集。...
Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。 SQL Server 数据类型 Character 字符串 数据类型 描述 存储 char(n) 固定长度的字符串。最多 8,000 个字符。 n varchar(n) 可变长度的...
text数据类型则用于存储超过8000个字符的超长文本,如文章或报告。 数值型数据类型是SQL Server 2000中的另一大类,包括整型、数字型和浮点型。整型数据类型分为bigint、integer (或 int)、smallint和tinyint。...
在SQL Server 2005中,推荐使用`varchar(max)`来替代旧的`text`数据类型。`varchar(max)`允许存储最多2GB的变长字符数据,而`text`类型虽然也能存储大量数据,但微软计划在未来版本中逐步淘汰。使用`varchar(max)`...
Text、Ntext 和 Image 数据类型分别用于存储非Unicode文本、Unicode文本和大型二进制对象,但它们在SQL Server 2008之后已被nvarchar(max)、ntext(max) 和 varbinary(max)替代,因为这些新类型提供了更大的存储容量...
SQL Server 2008 中的字符数据类型包括 varchar、char、nvarchar、nchar、text 和 ntext 等。这些数据类型用于存储字符数据。其中,varchar 和 char 是最常用的两种字符数据类型。它们的主要区别在于数据填充方式。...
本文将深入探讨`CHAR`、`VARCHAR`、`TEXT`以及`NCHAR`、`NVARCHAR`、`NTEXT`的区别,帮助开发者做出更明智的选择。 1. **CHAR**: - `CHAR`是一种定长字符串类型,它会为每个字段预留指定的字节数,无论实际存储的...
`text`和`ntext`用于存储大量文本,但在SQL Server 2005及以后版本中被`varchar(max)`和`nvarchar(max)`所替代,后者提供更高效的空间利用和性能。 ### 3. 日期和时间类型 随着对时间敏感数据处理的需求日益增加,...
13. **nchar/nvarchar/ntext**:统一编码字符类型,与char、varchar和text类似,但使用Unicode(UTF-16)编码,支持更多字符集。nchar和nvarchar的最大长度为4000个字符,ntext最大长度为2^31-1个字符。 了解并正确...
本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server 是微软开发的一款关系型数据库管理系统,它支持多种数据类型,可以...
在SQL Server 2005中,数据类型是定义数据库中列或变量的数据格式的关键元素。以下是关于SQL Server 2005常用数据类型的详细解释: 1. **字符串数据类型**: - `char`:定长字符串类型,用于存储长度固定的非...
- `nchar`和`nvarchar`在SQL Server中对应Oracle的`NCHAR`和`NVARCHAR2`,用于存储Unicode字符。 - `text`和`ntext`在SQL Server中对应Oracle的`CLOB`和`NCLOB`,用于存储大量文本数据。 - `image`在SQL Server中...
自定义数据类型是基于SQL Server的标准数据类型的,比如在示例中创建了一个名为`Address`的自定义数据类型,它是基于`varchar(35)`且不允许为空。这允许用户定义更具体的数据约束,但其基础仍然是系统提供的基本...
- **SQL Server**: 支持 `Char`, `VarChar`, `NChar`, `NVarchar`, `Text`, `NText` 和 `Xml` 类型。 **6. 备注类型** - **Microsoft Access**: 使用 `Memo` 类型。 - **SQL Server**: 使用 `VarChar(max)` 或 `...
非Unicode字符数据类型主要包含Char、Varchar和Text,而Unicode数据类型则包括Nchar、Nvarchar和Ntext。非Unicode字符数据类型主要以单字节来存储英文字符和特殊符号,而对于汉字这样的双字节字符则使用两个字节来...
- **`sql_variant`**:可以存储任意类型的 SQL Server 数据,除了 `text`、`ntext` 和 `timestamp` 之外的所有数据类型。最大存储容量为 8000 字节。 - **`uniqueidentifier`**:用于存储全局唯一标识符 (GUID),每...
除了上述提到的数据类型外,SQL Server 2008还支持其他特殊类型,例如timestamp(行版本控制的二进制数字)、sql_variant(可存储不同类型的数据,但不包括text、ntext或image等)、cursor(用于存储游标引用)以及...