我应该为 mysql db 选择什么数据类型来存储包含特殊字符的段落文本?

What datatype should i choose for mysql db to store a paragraph text which includes special characters as well?

在我的 MySql 数据库中,我想存储一些至少 1000 字的文本,其中包含一些特殊字符,例如 "",'()<>-.!; 数据将使用 php.

传递

VARCHAR 列是 variable-length 字符串。长度可以指定为 0 到 65,535 之间的值。 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,由表中的所有列共享)和使用的字符集。 VARCHAR 更易于使用。

TEXT 数据类型最多可容纳 64KB。 不要忘记在 TEXT 字段数据中转义 ' 字符(如 \')。

您可以使用 BLOB 数据类型来存储您的文本。它最多可以处理 64KB 的数据,即大约 64000 个字符。

有几种数据类型可以保存文本。当您声明它们中的任何一个时,您还可以指定它们的排序规则和字符集。例如:

CREATE OR REPLACE TABLE mytable {
    mytext VARCHAR(2000) COLLATE utf8mb4_general_ci
)

这使您可以存储最多 2000 个字符的 Unicode 文本。每个 Unicode 字符可以占用 1 到 4 个字节的存储空间。如您所知,Unicode 可以处理许多不同的人类脚本,更不用说表情符号和数学符号了。

要存储您拥有的文本

  • CHAR() 数据类型,前提是您预先确切知道必须存储多少个字符。
  • VARCHAR() 数据类型。它具有最佳性能,特别是如果你想对其进行过滤。
  • so-called LOB (large object) data types:
    • LONGTEXT ...您的文本最多 4GiB。这就是 WordPress 用于内容的内容,它的价值。
    • MEDIUMTEXT ... 高达 16MiB
    • TEXT ... 高达 64KiB
    • TINYTEXT ...最多255字节(没用,用VARCHAR(255)代替)

就使用的磁盘 space 而言,这些都有合理的开销。

如果要在 VARCHAR() 列上放置索引,请将其大小限制为 VARCHAR(768)

专业提示:除非绝对需要,否则请避免使用 LOB 数据类型。当您在 SELECT 或 WHERE 子句中使用它们时,它们会使服务器做额外的工作。请改用 VARCHAR()

Mediumtext 已知存在与插入 mediumtext 字段相关的错误,因此我建议您远离它,因为一个段落不足以保证它。