使用默认字符集仅创建整数 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。因此默认字符集无效。
当我创建一个 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。因此默认字符集无效。