- 浏览: 660636 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (609)
- java (139)
- 数据库 (107)
- 微信 (23)
- IT生活 (5)
- web前端 (74)
- SSH (11)
- 设计模式 (12)
- 重要资料 (11)
- 其他 (15)
- java技巧 (23)
- 服务器 (9)
- 2D/GUI (3)
- JAVA3D (2)
- ANT (5)
- Apache项目 (19)
- 数据类型 (10)
- 报表 (3)
- Collections (6)
- SQL/JDBC (15)
- 开发类 (6)
- EJB (6)
- Email (6)
- 文件读写 (2)
- 游戏 (0)
- Flex (2)
- Generic (2)
- HIbernate (12)
- I18N (5)
- Java EE (9)
- java ME (4)
- JDK 6 (8)
- JNDI/LDAP (5)
- JSP (7)
- JSTL (2)
- 正则表达式 (2)
- 安全 (2)
- Struts2 (12)
- Spring (4)
- Web服务 (10)
- Xml (1)
- JavaScript (30)
- AJAX (7)
- 验证 (4)
- 上传下载 (1)
- office办公软件 (1)
- Android (2)
- IOS (0)
- Dubbo (3)
- memcached/redis (1)
- 小程序 (1)
- 微信公众号 (0)
最新评论
-
wf_wangfeng:
怎么我用第一种方法不行呢 alert(document.rea ...
当jsp页面完全加载完成后执行一个js函数 -
Lori_Liu:
有帮助,至少可以解决了目前所遇到的问题!谢谢..
当jsp页面完全加载完成后执行一个js函数 -
starbhhc:
String actionMessage = new Stri ...
Java读取txt文件乱码 -
starbhhc:
Sev7en_jun 写道GOOD
客气,互相交流。。
javaeye论坛规则小测验(答案)--star -
Sev7en_jun:
GOOD
javaeye论坛规则小测验(答案)--star
我想要存储的许多文档都超过了8000个字节,那么很明显VARCHAR不是适合这项工作的数据类型。作为替代,TEXT数据类型被用来定义存放数据的字段。因为每个TEXT都能容纳2GB的内容,TEXT要存我扔进数据库的最大的文件也是没有问题的。
数月过去了,市场用大量的无聊拷贝填满了整个数据库。但是这还不是Steve真正关心的问题。数据库愉快地嗡嗡作响地运转着,每个人对项目的结果都很满意。
“没有问题,” ,我打开SQL Server 查询分析器工具,执行了如下的T-SQL批处理:
UPDATE MarketingDocuments
SET Document =
REPLACE(Document,
Its MegaWares Way or the Highway!,
MegaWare: Its really cool!)
当他看到出现的错误消息的时候,star的轻松的微笑很快消失了,“替换函数的参数1,text数据类型无效。”
替换函数在编写出来的时候,就对TEXT数据类型不起作用。同样也对CHARINDEX或者SUBSTRING不起作用——或者至少是他们在超过8千个字符的情况下不起作用。更进一步地讲,开发人员忘了处理TEXT或者IMAGE类型的本地变量;实际上不支持任何操作。即使是简单地更新一个文档中的一个子字符串都需要用到晦涩的东西,以及难以使用的类似READTEXT和WRITETEXT的函数。而不是开发人员或者忙碌的数据库管理员因为想要弄清如何正确使用而采用了不同类型的函数消耗了时间。
SQL Server的开发人员很幸运,他们将会拨开乌云见蓝天。SQL Server 2005引入了一系列新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型以前被限制在8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样——并且完全兼容所有的SQL Server内置的字符串函数。
用MAX关键字定义一个某种MAX类型的变量与替代字符串的尺寸(为VARCHAR/NVARCHAR的时候)或者字节(为VARBINARY的时候)一样简单。
DECLARE @BigString VARCHAR(MAX)
SET @BigString = abc
虽然这个变量可以自由地操纵,并且可以传递给任何的内置的字符串函数,兼容性仍然不是没有问题。首先,开发人员不能期望指定了尺寸的VARCHAR和VARBINARY变量在达到8000个字节的极限的时候可以自动“升级”到MAX版本。例如,如下的批处理:
DECLARE @String1 VARCHAR(4001)
DECLARE @String2 VARCHAR(4001)
SET @String1 = REPLICATE(1, 4001)
SET @String2 = REPLICATE(2, 4001)
SELECT LEN(@String1 + @String2)
4001+4001=8002,但是指定了尺寸的VARCHAR的极限是8000。因为这两个变量中没有一个是MAX类型,LEN函数的结果就是8000,不是8002。在将两个变量连接的时候,一种简单的修正方法就是声明这两个变量中的一个为VARCHAR(MAX)或者将其中的一个变量进行转换。与一个规定了尺寸的类型进行连接的时候,优先考虑MAX类型,最终结果是MAX类型。所以,以下批处理的结果是8002,正如我们期望的一样:
DECLARE @String1 VARCHAR(4001)
DECLARE @String2 VARCHAR(4001)
SET @String1 = REPLICATE(1, 4001)
SET @String2 = REPLICATE(2, 4001)
SELECT LEN(CONVERT(VARCHAR(MAX), @String1) + @String2)
在传递给字符串函数的时候,开发人员意识到字符串的原意在默认情况下是规定了尺寸的,而不是MAX类型,也是至关重要的。例如,以下查询的结果就很令人惊奇:
SELECT LEN(REPLICATE(1, 8002))
因为字符串‘1’是被作为规定了尺寸的VARCHAR对待,而不是VARCHAR(MAX),结果就是8000——但是在SQL Server 2005中,REPLICATE函数能够产生高达2GB的字符串。要修正这个问题,可以将字符串转换为VARCHAR(MAX),这样函数就会输出同样的类型了:
SELECT LEN(REPLICATE(CONVERT(VARCHAR(MAX), 1), 8002))
这个查询现在将会返回期望的结果:8002。记住,总是要对采用了新特性编写的代码进行非常仔细的测试;隐藏的问题,例如上面描述的问题,可能并且毫无疑问地会在最坏的时间里造成灾难性的后果。
除了变量之外,MAX类型也可以用于定义表的字段:
CREATE TABLE BigStrings
(
BigString VARCHAR(MAX)
)
当用于表的时候,意识到MAX类型具有与TEXT和IMAGE类型稍微不同的行溢出行为是非常重要的。在SQL Server中,最大的行尺寸是8060字节。要超过这个限制,并且仍然管理每个都拥有高达2GB的存储,用TEXT和IMAGE类型存储的数据会被存储引擎自动地断行,在行里只留下一个16字节的指针。这意味着行的尺寸是减少了,这对性能有好处。然而,检索大数据是昂贵的,因为它不是与同一行的数据存放在同一个位置。
MAX数据类型在默认情况下,使用TEXT/IMAGE溢出行为和正常尺寸的VARCHAR/VARBINARY类型的行为的混合方式。如果一个字段的数据,加上表中所有其他字段的数据,总量少于8060字节,数据就存放在行内。如果数据超过8060字节,MAX字段的数据就会存放在行外。对于大字符串的表,以下的行将会与表中的其他数据存储在同一个数据页内:
INSERT BigStrings (BigString)
VALUES (REPLICATE(1, 8000))
But the following row will result in an overflow:
INSERT BigStrings (BigString)
VALUES (REPLICATE(CONVERT(VARCHAR(MAX), 1), 100000))
你可以更改MAX数据类型在每个表的基础上的默认的行为,它们会表现得和TEXT和IMAGE类型一样。这是通过使用sp_tableoption 存储过程中的“大数值类型在行外”选项实现的。为了修改大字符串表以将MAX类型的处理方式变得与TEXT和IMAGE数据类型的处理方式相同,可以使用如下的T-SQL:
EXEC sp_tableoption
BigStrings,
large value types out of row,
1
看看定义一个MAX数据类型有多容易,与他们提供的灵活性一样,一些数据设计师将会被引诱以下列的方式开始定义表:
CREATE TABLE Addresses
(
Name VARCHAR(MAX),
AddressLine1 VARCHAR(MAX),
AddressLine2 VARCHAR(MAX),
City VARCHAR(MAX),
State VARCHAR(MAX),
PostalCode VARCHAR(MAX)
)
设计师要注意了:不要这样做!一个企业中的数据模型既应该包含有具有实际限制的数据,还要给用户接口设计师有关字段尺寸的大致的指导。像这样的表又该创建什么样的用户接口呢?
除了数据整合和用户接口含义之外,如果设计师这样不必要地使用这些类型还会带来性能上的损害。记住,查询优化器使用字段的尺寸作为判断优化查询计划的众多标准之一。对于这个表,优化器几乎没有任何选择。
所以,现在你知道了MAX数据类型为SQL Server 2005处理大数据增加了很大部分的灵活性。
数月过去了,市场用大量的无聊拷贝填满了整个数据库。但是这还不是Steve真正关心的问题。数据库愉快地嗡嗡作响地运转着,每个人对项目的结果都很满意。
“没有问题,” ,我打开SQL Server 查询分析器工具,执行了如下的T-SQL批处理:
UPDATE MarketingDocuments
SET Document =
REPLACE(Document,
Its MegaWares Way or the Highway!,
MegaWare: Its really cool!)
当他看到出现的错误消息的时候,star的轻松的微笑很快消失了,“替换函数的参数1,text数据类型无效。”
替换函数在编写出来的时候,就对TEXT数据类型不起作用。同样也对CHARINDEX或者SUBSTRING不起作用——或者至少是他们在超过8千个字符的情况下不起作用。更进一步地讲,开发人员忘了处理TEXT或者IMAGE类型的本地变量;实际上不支持任何操作。即使是简单地更新一个文档中的一个子字符串都需要用到晦涩的东西,以及难以使用的类似READTEXT和WRITETEXT的函数。而不是开发人员或者忙碌的数据库管理员因为想要弄清如何正确使用而采用了不同类型的函数消耗了时间。
SQL Server的开发人员很幸运,他们将会拨开乌云见蓝天。SQL Server 2005引入了一系列新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型以前被限制在8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样——并且完全兼容所有的SQL Server内置的字符串函数。
用MAX关键字定义一个某种MAX类型的变量与替代字符串的尺寸(为VARCHAR/NVARCHAR的时候)或者字节(为VARBINARY的时候)一样简单。
DECLARE @BigString VARCHAR(MAX)
SET @BigString = abc
虽然这个变量可以自由地操纵,并且可以传递给任何的内置的字符串函数,兼容性仍然不是没有问题。首先,开发人员不能期望指定了尺寸的VARCHAR和VARBINARY变量在达到8000个字节的极限的时候可以自动“升级”到MAX版本。例如,如下的批处理:
DECLARE @String1 VARCHAR(4001)
DECLARE @String2 VARCHAR(4001)
SET @String1 = REPLICATE(1, 4001)
SET @String2 = REPLICATE(2, 4001)
SELECT LEN(@String1 + @String2)
4001+4001=8002,但是指定了尺寸的VARCHAR的极限是8000。因为这两个变量中没有一个是MAX类型,LEN函数的结果就是8000,不是8002。在将两个变量连接的时候,一种简单的修正方法就是声明这两个变量中的一个为VARCHAR(MAX)或者将其中的一个变量进行转换。与一个规定了尺寸的类型进行连接的时候,优先考虑MAX类型,最终结果是MAX类型。所以,以下批处理的结果是8002,正如我们期望的一样:
DECLARE @String1 VARCHAR(4001)
DECLARE @String2 VARCHAR(4001)
SET @String1 = REPLICATE(1, 4001)
SET @String2 = REPLICATE(2, 4001)
SELECT LEN(CONVERT(VARCHAR(MAX), @String1) + @String2)
在传递给字符串函数的时候,开发人员意识到字符串的原意在默认情况下是规定了尺寸的,而不是MAX类型,也是至关重要的。例如,以下查询的结果就很令人惊奇:
SELECT LEN(REPLICATE(1, 8002))
因为字符串‘1’是被作为规定了尺寸的VARCHAR对待,而不是VARCHAR(MAX),结果就是8000——但是在SQL Server 2005中,REPLICATE函数能够产生高达2GB的字符串。要修正这个问题,可以将字符串转换为VARCHAR(MAX),这样函数就会输出同样的类型了:
SELECT LEN(REPLICATE(CONVERT(VARCHAR(MAX), 1), 8002))
这个查询现在将会返回期望的结果:8002。记住,总是要对采用了新特性编写的代码进行非常仔细的测试;隐藏的问题,例如上面描述的问题,可能并且毫无疑问地会在最坏的时间里造成灾难性的后果。
除了变量之外,MAX类型也可以用于定义表的字段:
CREATE TABLE BigStrings
(
BigString VARCHAR(MAX)
)
当用于表的时候,意识到MAX类型具有与TEXT和IMAGE类型稍微不同的行溢出行为是非常重要的。在SQL Server中,最大的行尺寸是8060字节。要超过这个限制,并且仍然管理每个都拥有高达2GB的存储,用TEXT和IMAGE类型存储的数据会被存储引擎自动地断行,在行里只留下一个16字节的指针。这意味着行的尺寸是减少了,这对性能有好处。然而,检索大数据是昂贵的,因为它不是与同一行的数据存放在同一个位置。
MAX数据类型在默认情况下,使用TEXT/IMAGE溢出行为和正常尺寸的VARCHAR/VARBINARY类型的行为的混合方式。如果一个字段的数据,加上表中所有其他字段的数据,总量少于8060字节,数据就存放在行内。如果数据超过8060字节,MAX字段的数据就会存放在行外。对于大字符串的表,以下的行将会与表中的其他数据存储在同一个数据页内:
INSERT BigStrings (BigString)
VALUES (REPLICATE(1, 8000))
But the following row will result in an overflow:
INSERT BigStrings (BigString)
VALUES (REPLICATE(CONVERT(VARCHAR(MAX), 1), 100000))
你可以更改MAX数据类型在每个表的基础上的默认的行为,它们会表现得和TEXT和IMAGE类型一样。这是通过使用sp_tableoption 存储过程中的“大数值类型在行外”选项实现的。为了修改大字符串表以将MAX类型的处理方式变得与TEXT和IMAGE数据类型的处理方式相同,可以使用如下的T-SQL:
EXEC sp_tableoption
BigStrings,
large value types out of row,
1
看看定义一个MAX数据类型有多容易,与他们提供的灵活性一样,一些数据设计师将会被引诱以下列的方式开始定义表:
CREATE TABLE Addresses
(
Name VARCHAR(MAX),
AddressLine1 VARCHAR(MAX),
AddressLine2 VARCHAR(MAX),
City VARCHAR(MAX),
State VARCHAR(MAX),
PostalCode VARCHAR(MAX)
)
设计师要注意了:不要这样做!一个企业中的数据模型既应该包含有具有实际限制的数据,还要给用户接口设计师有关字段尺寸的大致的指导。像这样的表又该创建什么样的用户接口呢?
除了数据整合和用户接口含义之外,如果设计师这样不必要地使用这些类型还会带来性能上的损害。记住,查询优化器使用字段的尺寸作为判断优化查询计划的众多标准之一。对于这个表,优化器几乎没有任何选择。
所以,现在你知道了MAX数据类型为SQL Server 2005处理大数据增加了很大部分的灵活性。
发表评论
-
mysql创建用户并授权
2016-09-04 23:42 6151.新建用户。 //登录MYSQL mysql -u ... -
java实现文件转换成二进制存储与取出
2016-08-06 01:21 2758一、功能描述: 将文件转成二进制数据放入数据库中,需要的 ... -
Mongodb的全面总结
2016-07-14 16:35 1405MongoDB的官方文档基本是how to do的介绍,而关 ... -
Navicat连接Oracle数据库时报错ORA-28547
2016-07-12 15:46 709用Navicat连接Oracle数据库时出现如下错误提示: ... -
4.ubuntu14.04 安装mongodb笔记
2016-05-06 08:52 6751、使用系统自动获取安装。 1)获取更新 s ... -
3.mongdb mongdb的shell命令
2016-04-14 11:10 1008在mongdb的安装目录,运行mongo.exe,运 ... -
2.mongdb mongdb客户端使用
2016-04-14 10:26 795robomongo,命令行方便 ... -
1. WIN7下安装运行mongodb
2016-04-14 10:11 5421)、下载MongoDBhttp://downloads. ... -
mysql 与mongodb的特点与优劣
2016-04-13 17:37 990介绍: MongoDB是 ... -
报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用l
2015-07-06 13:16 827报错:1130-host ... is not allow ... -
sql查询今天、昨天、本周、本月、日期的
2015-05-15 10:55 1794sql 求解两个时间差 SELECTDATEDIFF ... -
druid demo
2015-04-08 15:13 1623java程序很大一部分要操作数据库,为了提高性能操作数据库的 ... -
Druid数据库连接池使用
2015-04-08 15:03 732阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的D ... -
Hibernate与 MyBatis的比较
2015-03-20 00:34 642mybatis是半自动的,hibernate是全自动的,就是 ... -
经典SQL语句大全
2015-01-16 01:02 566一、基础 1、说明:创建数据库CREATE DATABAS ... -
MyBatis的几种批量操作
2015-01-11 22:59 1698MyBatis中批量插入 方法一: &l ... -
spring与mybatis三种整合方法
2015-01-11 22:58 491本文主要介绍Spring与Mybatis三种常用整合方法, ... -
MyBatis(六)、MyBatis主配置文件
2015-01-11 22:58 697在定义sqlSessionFactory时需要指定MyBa ... -
MyBatis(五)、动态SQL语句
2015-01-09 01:01 749有些时候,sql语句where条件中,需要一些安全判断,例 ... -
MyBatis(四)、SQL语句映射文件(2)增删改查、参数、缓存
2015-01-09 01:00 5292.2 select 一个select 元素非常简单。例如 ...
相关推荐
SQL Server 2005 数据类型是数据库设计的基础,它决定了数据如何被存储和处理。在SQL Server 2005中,数据类型分为两大类:字符串数据类型和数值数据类型。 1. 字符串数据类型: - `char`: 定长字符串,存储1到...
### SqlServer数据库的数据类型详解 数据类型在编程与数据库管理中扮演着至关重要的角色,它不仅定义了数据的存储方式,还决定了数据可以执行的操作。SQL Server作为一种广泛使用的数据库管理系统,提供了丰富的...
SQL_Server_数据类型详解 SQL Server 数据类型是指在 SQL Server 中存储数据的格式,它可以分为整数型、浮点型、二进制型等多种类型。了解 SQL Server 的数据类型对于数据库的设计和开发至关重要。 整数型数据类型...
SQL Server 2005 和 .NET Framework 之间的数据类型对应关系是开发数据库应用程序时的重要基础知识。理解这些对应关系有助于确保在SQL Server中存储的数据能够正确地被.NET应用程序读取和处理。以下是对两种数据类型...
在SQL Server 2005中,数据类型的丰富性和灵活性为数据库设计提供了强大的支持,能够满足各种业务场景的需求。以下是对部分关键数据类型及其特性的深入解析: ### 1. 字符串类型 #### `char` 和 `varchar` - `...
SQL Server 2000 是一个关系型数据库管理系统,它提供了丰富的数据类型来支持各种不同种类的数据存储。数据类型是数据库设计的基础,它定义了数据的结构和含义。本章将详细阐述SQL Server 2000 中的主要数据类型。 ...
在本课程中,我们聚焦于"SQL Server 2005盛宴系列之六:新的选择――SQL Server Express 2005"。SQL Server 2005是微软推出的一款强大的关系型数据库管理系统,旨在为企业级应用提供稳定、高效的数据存储和管理解决...
- 表设计:掌握如何定义表结构,包括字段、数据类型、主键和外键。 - 查询语言:学习T-SQL,包括SELECT、INSERT、UPDATE和DELETE语句。 - 触发器和存储过程:理解如何编写和使用触发器及存储过程来实现业务逻辑。...
在SQL Server 2000中,数据类型的选择至关重要,因为它直接影响到数据的存储方式、大小以及处理效率。 首先,让我们来看看字符数据类型。SQL Server 2000 提供了三种基本的字符数据类型:char(n),varchar(n),和...
在探讨SQL Server数据类型的深度与广度时,我们不得不承认,这一主题是数据库设计与管理中的基石之一。SQL Server作为一款强大的关系型数据库管理系统,提供了丰富多样的数据类型,旨在满足不同场景下的数据存储需求...
在SQL Server 2005中,数据类型是定义数据库中列或变量的数据格式的关键元素。以下是关于SQL Server 2005常用数据类型的详细解释: 1. **字符串数据类型**: - `char`:定长字符串类型,用于存储长度固定的非...
在数据库管理与开发领域,SQL Server 2005 是一个重要的工具,它提供了丰富的功能来满足数据存储、管理和查询的需求。本文将深入解析 SQL Server 2005 的基本方法与常用语句,包括数据库的创建与删除、表的创建与...
### SQL Server 数据类型详解 #### 一、字符型数据 SQL Server 提供了多种字符型数据类型,包括固定长度和可变长度的数据类型。 - **`char(n)`**:固定长度字符串,`n` 表示字符的最大长度,最大值为 8000 字符。...
在SQL Server 2005中,创建数据库需要指定大小、文件位置和事务日志。而创建表则涉及字段定义,包括数据类型(如INT、VARCHAR、DATE等)、约束(主键、外键、唯一性约束等)以及默认值。理解这些基础知识对于数据...
在SQL Server中,数据类型是定义列和变量的基础,它们决定了可以存储的数据种类以及存储方式。下面是关于SQL Server中各种数据类型的详细说明: 1. **bit**:位数据类型,用于存储0、1或NULL值,常用于表示布尔值...
"SQLServer2005样例数据库.rar"可能包含SQL Server 2005的标准示例数据库,如AdventureWorks,它可以帮助学习者了解实际数据库结构和业务场景。"SQLServer2005第14章源代码.rar"可能包含了与某一教材或课程相关的...
这是SQL Server 2005中最大的整数数据类型,适用于需要存储大范围数值的应用场景,如人口统计、金融交易等。 #### Binary (二进制数据类型) Binary数据类型用于存储二进制数据,可以存储从1到8000个字节的二进制...
本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server 是微软开发的一款关系型数据库管理系统,它支持多种数据类型,可以...
SQLSERVER2005是微软公司推出的一款关系型数据库管理系统,是SQL Server系列的一个重要版本。这个学习资料包显然旨在帮助初学者掌握SQL Server 2005的基础知识和实际操作技能,包括安装过程、数据库的创建以及在实际...
- 数据类型映射:不同数据库系统对数据类型的处理方式不同,需要确保数据类型在迁移后的一致性。 - 应用程序修改:迁移后,应用程序可能需要调整以适应新的数据库结构和API。 - 性能评估:迁移后,需要对新系统...