使用默认字符集仅创建整数 table,坏主意?

Create integer only table with a default charset, bad idea?

当我创建一个 table 时,即使它只使用整数,我也会将默认字符集设置为 utf8(因为我复制粘贴了代码,因为以防将来我引入字符串列)。

示例:

CREATE TABLE IF NOT EXISTS `articles` (
  `id` smallint(6) unsigned NOT NULL,
  `disabled` tinyint(1) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

但是,我想知道在不使用它的 table 中使用默认字符集是否会影响“性能”。

无论如何表都有一个字符集,所以不,没有性能问题,UTF-8 是一个很好的默认选择 (but utf8 is not)。但你还是不应该那样做。

添加默认字符集是一种不好的做法,除非您需要指定一个字符集。这将覆盖可能不是 utf8 的数据库的默认字符集。您冒着使用与其他 table 不同的字符集制作 table 的风险,从而导致混淆。

相反,请确保正确设置了服务器和数据库字符集。然后让您的 table 使用默认值,除非您有特殊原因不这样做。

例如,UTF-8 是一个很好的默认选择,但是 MySQL got UTF-8 wrong. utf8 cannot handle all of UTF-8. You should instead be using utf8mb4(UTF-8 4 字节)。数据库可能会正确使用 utf8mb4,但您正在使用功能较弱的字符集覆盖它。

Specifying Character Sets and Collations and Unicode Support

您 table 创建底部的 DEFAULT CHARSET 子句只是元数据。它仅在您添加 CHAR/VARCHAR/TEXT 列并且未明确定义该列的字符集时使用。然后使用table的默认字符集。

表没有任何性能特征 — 它们只是存储。查询有性能。

由于您的 table 没有包含字符集的列,因此无法查询受字符集影响的 table。因此默认字符集无效。