【发布时间】:2018-10-30 16:55:07
【问题描述】:
我已经在这里和那里阅读了自己,但还没有找到回答我问题的答案...... 我现在有一个数据库 utf8mb4 并想将一个字符串存储在一个列中(长度为 200-250 个字符)。 VARCHAR (200 - 250) 现在可以用于 utf8mb4 还是我必须使用 TEXT?
【问题讨论】:
我已经在这里和那里阅读了自己,但还没有找到回答我问题的答案...... 我现在有一个数据库 utf8mb4 并想将一个字符串存储在一个列中(长度为 200-250 个字符)。 VARCHAR (200 - 250) 现在可以用于 utf8mb4 还是我必须使用 TEXT?
【问题讨论】:
请参阅 MySQL 文档上的 this article:
就表结构而言,这些是主要潜力 不兼容:
对于可变长度字符数据类型(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 个字符长的字符串。
【讨论】:
Text 数据类型不能被索引;而Varchar 可以被索引
VARCHAR(191)(又名 767 字节)索引问题。查看我的链接。
如果您想在一列中存储 250 个字符,请使用 VARCHAR(250) 或更多。您也可以使用TEXT 类型。真的没多大关系。两者都是可变长度。我建议使用比您需要的更大的最大尺寸。通过指定超出您的需要,您不会失去任何东西。
列的大小与编码无关,因为 MySQL 计算字符数,而不是字节数。如果要存储所有 Unicode 字符,则必须使用 utf8mb4 字符集。
【讨论】: