根据定义:
VARCHAR:Length的范围是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
Run Code Online (Sandbox Code Playgroud)
或者创建varchar或tinytext更好,为什么?
它是否相同:
VARCHAR:长度范围> 255个字符.除非给出BINARY关键字,否则VARCHAR值将以不区分大小写的方式进行排序和比较.x + 2个字节
BLOB,TEXT BLOB或TEXT列,最大长度为65535(2 ^ 16 - 1)个字符x + 2个字节
Boo*_*eus 152
来自:http://www.pythian.com/news/7129/text-vs-varchar/
乍一看,看起来TEXT和VARCHAR可以存储相同的信息.但是,TEXT字段和VARCHAR字段的工作方式之间存在根本区别,这一点很重要.
标准 VARCHAR实际上是ISO SQL:2003标准的一部分; TEXT数据类型(包括TINYTEXT)是非标准的.
存储 TEXT数据类型作为单独的对象存储在包含它们的表和结果集中.此存储是透明的 - 与涉及VARCHAR字段的查询相比,写入涉及TEXT字段的查询的方式没有区别.由于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:
Run Code Online (Sandbox Code Playgroud)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对象中)的列表:
Run Code Online (Sandbox Code Playgroud)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 overheadDEFAULT值 MySQL不允许TEXT数据类型具有NULL以外的默认值.允许使用DEFAULT值创建VARCHAR字段.
结论由于存储问题,最好使用VARCHAR而不是TINYTEXT.
如果需要具有非NULL的DEFAULT值,则必须使用VARCHAR(或CHAR).
如果您需要存储长度大于约64 Kb的字符串,请使用MEDIUMTEXT或LONGTEXT.VARCHAR不支持存储大的值.
确保您了解多字节字符集的效果.VARCHAR(255)存储255个字符,可能超过255个字节.
在这种情况下varchar更好.
请注意,varchar可以是1到65535个字符.
VARCHAR列中的值是可变长度字符串.长度可以指定为MySQL 5.0.3之前的0到255之间的值,5.0.3及更高版本中的0到65,535之间的值.MySQL 5.0.3及更高版本中VARCHAR的有效最大长度受最大行大小(65,535字节,在所有列之间共享)和使用的字符集的限制.请参见第E.7.4节"表列计数和行大小限制".
Blob保存在文件的单独部分中.
它们需要额外的文件读取才能包含在数据中.
因此,varchar的获取速度要快得多.
如果你有一个很少访问的blob,那么blob就更有意义了.
将blob数据存储在单独的(部分)文件中可以使核心数据文件更小,从而更快地获取.
| 归档时间: |
|
| 查看次数: |
62557 次 |
| 最近记录: |