Php MySQL-是否对可能较小的字符串使用文本过度?

Php MySQL-是否对可能较小的字符串使用文本过度?,php,mysql,database,string,data-structures,Php,Mysql,Database,String,Data Structures,在MySQL中,我一直担心的一件事是字符串字段不够大,无法存储需要存储的数据。我目前正在处理的PHP项目将需要存储字符串,字符串的长度可能会有很大的变化 由于不熟悉MySQL存储字符串数据的方式,我想知道对于通常少于100个字符的字符串使用更大的数据类型(如TEXT)是否有些过分。MySQL如何处理这种高度可变的数据?请参见: VARCHAR(M),VARBINARY(M)L+1字节 如果列值需要0–255 字节,L+2字节(如果值可能) 需要超过255个字节 BLOB,文本L+2字节,其中L

在MySQL中,我一直担心的一件事是字符串字段不够大,无法存储需要存储的数据。我目前正在处理的PHP项目将需要存储字符串,字符串的长度可能会有很大的变化

由于不熟悉MySQL存储字符串数据的方式,我想知道对于通常少于100个字符的字符串使用更大的数据类型(如
TEXT
)是否有些过分。MySQL如何处理这种高度可变的数据?

请参见:

VARCHAR(M),VARBINARY(M)L+1字节 如果列值需要0–255 字节,L+2字节(如果值可能) 需要超过255个字节

BLOB,文本L+2字节,其中L<2^16

因此,在最坏的情况下,在使用文本时,每个表单元格多使用1字节

至于索引:可以,但必须给出前缀长度-例如

CREATE INDEX part_of_name ON customer (name(10));
此外,如果使用MyISAM引擎,文本列允许您创建和查询全文索引


另一方面,文本列不是与表一起存储的,因此从理论上讲,性能在某些情况下可能会成为一个问题(基准测试以了解您的具体情况)。

在MySQL的最新版本中,VARCHAR字段可能相当长—最多65535个字符,具体取决于字符集和表中的其他列。当您有不同长度的字符串时,它非常有效。见:


如果您需要更长的字符串,您可能只需要将其吸收并使用文本。

应该指出,全文索引仅适用于MyISAM表。如果你在InnoDB上,你就不走运了。