text、ntext类型的字段不能和 varchar类型进行add(+)运算, *** 作TEXT类型字段的和 *** 作普通其它字符串类型字段是不一样的,这里需要用updatetext语句才行。
表:
CREATE TABLE [dbo][test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[mytext] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
数据:
id mytext
1 aaaa
在TEXT类型中追加字符串:
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(mytext) from test
UPDATETEXT testmytext @ptrval null 0 'bbbb'
运行结果:
id mytext
1 aaaabbbb
追加成功,这个是在数据库中完成的。
这两个的区别是长度不同。
MEDIUMTEXT :一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
TEXT :一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。
数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
数据库表中字段类型有以下几种:
二进制数据类型
Binary、Varbinary、Image
2字符数据类型
Char,Varchar和 Text
3Unicode数据类型
包括Nchar,Nvarchar和Ntext
4日期和时间数据类型
包括Datetime, Smalldatetime, Date, TimeStamp
5数字数据类型
数字数据类型包括正数和负数、小数和整数
6货币数据类型
表示正的或者负的货币数量。
7特殊数据类型
特殊的数据类型有3种,即Timestamp、Bit 和 Uniqueidentifier。
根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……
在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。
它们的存储方式和数据的检索方式也都不一样。
数据的检索效率是:char
>
varchar
>
text
具体说明:
char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。
varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。
关于存储空间:
在使用UTF8字符集的时候,MySQL手册上是这样描述的:
基本拉丁字母、数字和标点符号使用一个字节;
大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;
韩语、中文和日本象形文字使用三个字节序列。
结论:
1、经常变化的字段用varchar;
2、知道固定长度的用char;
3、超过255字节的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;
6、同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表,原因请考
优化InnoDB表BLOB,TEXT列的存储效率
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:MySQL数据库迁移快速导出导入大量数据shell脚本 *** 作mysql数据库删除重复的数据MySQL数据库列的增删改实现方法MySQL实现类似Oracle序列的方案mysql实现sequence功能的代码Can''t
connect
to
local
MySQL
through
socket
''/tmp/mysqlsock''解决方法mysql中rpm方式安装的详解Mysql常用函数大全(分类汇总讲解)利用MySQL主从配置实现读写分离减轻数据库压力mysql+spring+mybatis实现数据库读写分离的代码配置
MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。
这两个的区别是长度不同。
你可以考虑禁用 text in row 选项:
sp_tableoption N 'MyTable ', 'text in row ', 'OFF '
这时sql2000的资料,2005也差不多
Text in Row 数据
Microsoft® SQL Server™ 2000 支持在数据行中存储小型到中等的 text、ntext 和 image 值。该功能最适于这样的表:text、ntext 和 image 列中的数据通常读取或写入一个单元,并且大多数引用该表的语句都使用 text、ntext 和 image 数据。
除非指定 text in row 选项,否则 text、ntext 或 image 字符串为存储在数据行外的大型(最大 2GB)字符串或二进制字符串。数据行只包括一个 16 字节的文本指针,该指针指向一个树的根节点,该树由映射存储串片段的页的内部指针构成。有关 text、ntext 或 image 字符串存储的更多信息,请参见 text、ntext 和 image 数据。
可为包含 text、ntext 或 image 列的表设置 text in row 选项。还可以指定 text in row 选项限制,从 24 到 7,000 字节。如果设置了该选项,则在下列情况下,text、ntext 或 image 字符串直接存储在数据行中:
字符串的长度比指定的长度限制短。
数据行中有足够的可用空间容纳字符串。
当 text、ntext 或 image 串被存储在数据行时,SQL Server 就无须访问单独的页或页的集合来读写这些串。这使得读写 text、ntext 或 image 这些行中的串就象读写 varchar、 nvarchar 或 varbinary 串一样快。
如果 text、ntext 或 image 字符串的长度比 text in row 选项的限制或行中的可用空间长,则本应存储在指针树根节点中的指针集将存储在行中。下列情况下,将指针存储在行中:
存储指针所需的空间量比 text in row 选项限制指定的少。
数据行中有足够的可用空间容纳指针。
当指针从根节点移至行本身时,SQL Server 无须使用根节点。这可在读取或写入字符串时消除页访问,从而加快处理速度。
当使用根节点时,它们被存储为 text、ntext 或 image 页中的一个字符串片段,并且可最多容纳五个内部指针。SQL Server 的行需要 72 字节的空间存储行内字符串的五个指针。如果当 text in row 选项打开时行中没有足够的空间容纳指针,SQL Server 必须分配一个 8-K 页容纳它们。不应将 text in row 限制设置为小于 72 字节,除非确定存储在列中的所有字符串都较短或超过 3 MB。
当 text、ntext 或 image 字符串存储在行中时,它们的存储类似于长度可变的字符串。例如,如果 text in row 选项的限制为 500 字节,则在行中存储一个 200 字节的字符串时,SQL Server 将只使用存储该字符串所需的字节数。如果插入的字符串比 500 字节长,因而指针存储在行中,则 SQL Server 只使用足够容纳指针的空间,而不是全部 500 字节。
如果某个表有多个 text、ntext 或 image 列,则当尝试插入多个 text、ntext 或 image 字符串时,SQL Server 将按基于列 ID 的顺序给这些字符串逐个分配空间。例如,假设有一个包含四个 text 列的表,并且将 text in row 选项的限制设置为 1000。然后插入某行,而该行中每个 text 列都为 900 字节的字符串,并且有足够的数据用于表中的所有其它列,因此在行中只有 3,000 字节的可用空间容纳 text 字符串。前三个 text 列的字符串存储在行中,使用 3,000 可用字节中的 2,700 字节。第四个 text 列的字符串不存储在行中,但根节点的指针存储在行中。
启用和禁用 text in row 选项
可使用 sp_tableoption 为表启用 text in row 选项:
sp_tableoption N 'MyTable ', 'text in row ', 'ON '
或者,可以为可在数据行中存储的 text、ntext 和 image 字符串长度指定从 24 到 7000 字节的最大限制:
sp_tableoption N 'MyTable ', 'text in row ', '1000 '
如果指定的是 on 而不是一个特定的限制,则此限制的默认值为 256 字节。该默认值使您得以从 text in row 选项中获得最多的性能收益。尽管在通常情况下,不应将此值设为低于 72,但也不应把此值设得过高,特别是对那些大多数语句都不引用 text、ntext 和 image 列的表或者具有多个 text、ntext 和 image 列的表。如果设置了较大的 text in row 限制,且行本身存储了许多字符串,则可以显著减少存储在每页上的数据行数。如果大多数引用表的语句不访问 text、ntext 或 image 列,则减少页中的行数会增加处理查询时必须读取的页数。减少每页上的行数会增加索引及页的大小,优化器找不到可用的索引时可能需要扫描这些索引和页。text in row 限制的默认值 256 足以确保小型字符串和根文本指针存储在行中,同时不会使每页上的行减少得太多以至影响性能。
也可以使用 sp_tableoption 关闭此选项,这可以通过指定 off 或 0 选项值来实现:
sp_tableoption N 'MyTable ', 'text in row ', 'OFF '
text in row 选项的效果
text in row 选项具有下列效果:
打开 text in row 选项后,不能使用 READTEXT、UPDATETEXT 或 WRITETEXT 语句读取或修改存储在表中的任何 text、ntext 或 image 值的任何部分。在 SELECT 语句中可以读取整个 text、ntext 或 image 字符串,或者使用 SUBSTRING 函数读取部分字符串。所有引用表的 INSERT 或 UPDATE 语句必须指定完整的字符串,并且不能只修改 text、ntext 或 image 字符串的一部分。
当第一次启用 text in row 选项时,现有 text、ntext 或 image 字符串不会立即转换成行内字符串。仅当随后更新字符串时,这些字符串才转换成行内字符串。在打开 text in row 选项后插入的任何 text、ntext 或 image 字符串将作为行内字符串插入。
关闭 text in row 选项可能是长时间运行的日志记录 *** 作。表被锁定且所有行内 text、ntext 和 image 字符串都转换成常规 text、ntext 和 image 字符串。运行命令所需的时间和需要修改的数据量,取决于必须从行内字符串转换成常规字符串的 text、ntext 和 image 字符串的数量。
text in row 选项不影响用于 SQL Server 的 OLE DB 提供程序或 SQL Server ODBC 驱动程序的 *** 作,而只会加快访问 text、ntext 和 image 数据的速度。
打开 text in row 选项后,DB-Library text 和 image 函数(如 dbreadtext 和 dbwritetext)不能在表上使用。
下列各项的 text in row 选项自动设置成 256:
含有表数据类型的变量。
由返回 table 的用户定义函数所返回的表。
不能更改该设置。
以上就是关于text类型怎么插入数据全部的内容,包括:text类型怎么插入数据、在数据库中“mediumtext”和“text”有什么区别、数据库的表中,字段类型有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)