MySQL VARCHAR or TEXT

3

我已经自己查阅了一些资料,但没有找到能够回答我的问题的答案... 我现在有一个utf8mb4数据库,并且想要在一个列中存储一个200-250个字符长度的字符串。 使用VARCHAR(200-250),对于utf8mb4来说是否足够,还是我需要使用TEXT?

2个回答

2
请查看MySQL文档上的这篇文章
在表结构方面,以下是主要可能存在的不兼容性:
- 对于可变长度字符数据类型(VARCHAR和TEXT类型),utf8mb4列中允许的最大字符长度比utf8mb3列少。 - 对于所有字符数据类型(CHAR、VARCHAR和TEXT类型),utf8mb4列中可以索引的最大字符数比utf8mb3列少。
因此VARCHAR字段将不支持您的列数据,因为它只为3字节字符保留空间(如名称所示,utf8mb4使用4字节)。
在这种情况下,您需要使用另一种列类型,例如TEXT
引用文章有更多详细信息,我建议您阅读它。
编辑:
阅读更多后,我意识到VARCHAR数据类型实际上支持最多65535个字符(自MySQL 5.0.3以来)和65535字节。因此,实际上字符的最大长度为65535/4 = 16383个字符
所以,是的,您的VARCHAR列将支持250个字符长的字符串。

Varchar类型有最大的字节大小限制为65535个字节。即使是4字节字符,也可以容纳65535/4 = 16383个字符。对于只需要200-250个字符的OP来说,这已经足够了。此外,“Text”数据类型无法索引,而“Varchar”可以索引。 - undefined
@MadhurBhaiya 我正在编辑的时候你评论了。:-D 谢谢 - undefined
啊,好的,谢谢你的回答。那么我会按计划使用这段文本。很高兴从uft8到uft8mb4的排序更改没有出现任何问题。现在我只需要调整所有VARCHAR(191+)列。 @Madhur Bhaiya:在我的情况下没有问题,因为我不想对这些列建立索引。 - undefined
所以是的,VARCHAR。只是让我感到惊讶的是,在转换过程中出现了一个错误消息,涉及到整个VARCHAR(255)字段。刚刚测试了一下。可以在一个VARCHAR列中存储350个字符(字母、字符和数字),没有任何问题。 - undefined
1
@NormanHuth - MariaDB 10.1和MySQL 5.6存在VARCHAR(191)(也称为767字节)索引问题。请查看我的链接。 - undefined
显示剩余2条评论

0

如果您想在列中存储250个字符,那么请使用VARCHAR(250)或更大的类型。您也可以使用TEXT类型。这并不太重要,因为它们都是可变长度的。我建议使用比您需要的更大的最大大小。通过指定超过所需大小,您不会失去任何东西。

列的大小与编码无关,因为MySQL计算的是字符数,而不是字节数。如果您想存储所有Unicode字符,则必须使用utf8mb4字符集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接