根据定义:
VARCHAR:长度范围是1到255个字符。除非指定BINARY关键字,否则以不区分大小写的方式对VARCHAR值进行排序和比较。x + 1个字节
TINYBLOB,TINYTEXT:BLOB或TEXT列,最大长度为255(2 ^ 8-1)个字符x + 1个字节
因此,基于此,我创建了下表:
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255),
`lastname` tinytext,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
还是创建varchar或tinytext更好, 为什么 ?
是否相同:
VARCHAR:长度范围大于255个字符。除非指定BINARY关键字,否则以不区分大小写的方式对VARCHAR值进行排序和比较。x + 2字节
BLOB,TEXT BLOB或TEXT列,最大长度为65535(2 ^ 16-1)个字符x + 2字节
来自:http :
//www.pythian.com/news/7129/text-vs-
varchar/
乍一看,看起来TEXT和VARCHAR可以存储相同的信息。但是,TEXT字段和VARCHAR字段的工作方式之间存在根本差异,需要考虑到这些差异。
标准 VARCHAR实际上是ISO SQL:2003标准的一部分;TEXT数据类型(包括TINYTEXT)是非标准的。
存储 TEXT数据类型存储为与表和包含它们的结果集不同的对象。此存储是透明的-
涉及TEXT字段的查询与涉及VARCHAR字段的查询的写入方式没有区别。由于TEXT不存储为行的一部分,因此检索TEXT字段需要额外的[已编辑的1/22]内存开销。最大VARCHAR长度
VARCHAR的最大行长度受表的最大行长度限制。对于大多数存储引擎,这是65,535字节(NDB具有不同的最大行值)。理论上,VARCHAR的最大长度为65,536字节。开销进一步限制了VARCHAR的实际最大大小。如果VARCHAR字段的最大长度为0-255字节,则存储VARCHAR字段的长度将占用1个字节;如果大于255个字节,则存储长度的开销为2个字节。如果VARCHAR字段允许使用NULL值,则将增加额外的开销-
每个表对允许NULL值的8个字段的每组使用1个字节的开销。如果VARCHAR是表中的唯一行,并且不允许NULL值,则VARCHAR允许的最大长度为65,532字节。请记住,VARCHAR(x)中的数字表示字符数,而不是字节数。因此,如果字符集使用多字节字符(例如UTF-8),则尝试仅使用VARCHAR(65532)定义表可能会遇到困难。
如果尝试定义比允许的长度更长的VARCHAR值,则会遇到诸如1118或1074的错误:
ERROR 1118 (42000): Row size too large. The maximum row size for the
used table type, not counting BLOBs, is 65535. You have to change some
columns to TEXT or BLOBs.ERROR 1074 (42000): Column length too big for column 'col_name'
(max=[max number here]); use BLOB or TEXT instead
最大TEXT长度
TEXT数据类型的最大大小取决于所使用的TEXT数据类型。因为它们存储为对象,所以表对象中唯一的行开销是指针(8或16个字节)。这是最大TEXT长度和开销(在TEXT对象中)的列表:TINYTEXT – up to 255 bytes, 1 byte overhead TEXT – up to 64 Kb, 2 bytes overhead MEDIUMTEXT – up to 16 Mb, 3 bytes overhead LONGTEXT – up to 4 Gb, 4 bytes overhead
默认值 MySQL不允许TEXT数据类型具有非NULL的默认值。允许使用DEFAULT值创建VARCHAR字段。
结论 由于存在存储问题,因此最好使用VARCHAR而不是TINYTEXT。
如果需要的DEFAULT值不为NULL,则必须使用VARCHAR(或CHAR)。
如果您需要存储长于大约64 Kb的字符串,请使用MEDIUMTEXT或LONGTEXT。VARCHAR不支持存储太大的值。
确保您了解多字节字符集的影响。VARCHAR(255)存储255个字符,可能超过255个字节。
问题内容: 是否可以将SQL Server 2008数据库中的列类型从更改为,而不必删除表并重新创建? 每当我尝试使用SQL Server Management Studio进行操作时,SQL Server Management Studio都会向我抛出一个错误-但是让我头疼的是,很高兴知道我是否可以更改类型而不必删除和创建。 谢谢 问题答案: 您应该能够使用TSQL做到这一点。 就像是
我使用并有一个MySql db表,该表是用以下方式创建的:
问题内容: 我正在使用该程序包从数据库查询文本列。该数据库基于Microsoft SQL Server 2008 R2构建。SQL中列的数据类型为。 但是,当我运行时: 在SQL中,我期望(对于第一行): 但是,当我这样做时: 它返回: 255 。 所以我的问题是,是什么导致了这种截断,我该如何避免呢?谢谢!! 问题答案: 好的,看来我已经找到了解决方法。经过更多Google搜寻后,我发现: SQ
问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能的重复: 对所有基于文本的字段使用通用varchar(255)有不利之处吗? 在MYSQL中,您可以为VARCHAR字段类型选择一个长度。可能的值为1-255。 但是,如果使用最大值而不是VARCHAR(20)的VARCHAR(255),它的优点是什么?据我所知,条目的大小仅取决于插入字符串的实际长度。 大小(字节)=长度+1 因此,如
我想在JavaHibernate自动创建表时将255增加到1000,但如何做到这一点? 可能需要更改的部分代码:
问题内容: 当前列是VARCHAR(255)NOT NULL,那么如何将其更改为TEXT NOT NULL? 注意:要更改其属性类型的列是另一列的UNIQUE KEY组合。例如 唯一键(名称,说明) 列描述当前位于varchar(255)中。因此无法更改: 错误1170(42000):在密钥规范中使用的BLOB / TEXT列’description’没有密钥长度 我需要它是TEXT,否则我需要重