您可以声明的最大VARCHAR是64KB.TEXT列的最大长度为64KB.
请参阅http://dev.mysql.com/doc/refman/5.6/en/string-type-overview.html
如果您需要更长的字符串,则应使用MEDIUMTEXT.此数据类型最多可存储16MB.
你在哪里知道VARCHAR"比TEXT快得多?" 在InnoDB存储引擎中,VARCHAR,TEXT和BLOB以相同的方式存储.
我阅读了链接到的论坛文章,我的反应是:
该线程中显示的示例使用MyISAM存储引擎,该引擎实际上已过时且使用不当.
作者误解了"使用索引"的含义.它实际上意味着"仅使用索引,无需读取表格行".当您尝试使用前缀索引时,这会破坏执行仅索引查询的任何机会.
尝试为PRIMARY或UNIQUE字段使用前缀索引会产生一些意想不到的后果,例如无法正确执行唯一性:
mysql> create table foo (t text, primary key(t(50)));
mysql> insert into foo values (concat(repeat('a',50), 'x'));
mysql> insert into foo values (concat(repeat('a',50), 'y'));
ERROR 1062 (23000): Duplicate entry
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay' for key 'PRIMARY'
Run Code Online (Sandbox Code Playgroud)
好的,我想我会使用2列,一个VARCHAR和一个MEDIUMTEXT,让我的程序尽可能使用VARCHAR.这会浪费每行3个字节,我需要一直读取VARCHAR以查看是否为空.这是一个好主意吗?
我不会这样做.当您必须检查数据所在的列时,它会使您的应用程序变得复杂.通过您需要执行的额外编码工作,您可能会因将字符串存储在一个列类型或另一个列中而获得的任何微不足道的优势,以及潜在的错误将介绍.
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |