10.3.9 字符集和排序规则分配的示例

以下示例说明 MySQL 如何确定默认字符集和排序规则值。

示例 1:table 和列定义

CREATE TABLE t1
(
    c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci
) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;

在这里,我们有一列具有latin1字符集和latin1_german1_ci排序规则的列。该定义是明确的,因此很简单。注意,在latin2table 中存储latin1列没有问题。

示例 2:table 格和列的定义

CREATE TABLE t1
(
    c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

这次,我们有一列包含latin1字符集和默认排序规则。尽管看起来很自然,但默认排序规则并非来自 table 级别。相反,因为latin1的默认排序规则始终为latin1_swedish_ci,所以列c1的排序规则为latin1_swedish_ci(而不是latin1_danish_ci)。

示例 3:table 格和列的定义

CREATE TABLE t1
(
    c1 CHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

我们有一列带有默认字符集和默认排序规则。在这种情况下,MySQL 检查 table 级别以确定列字符集和排序规则。因此,列c1的字符集为latin1,而其排序规则为latin1_danish_ci

示例 4:数据库,table 和列定义

CREATE DATABASE d1
    DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;
USE d1;
CREATE TABLE t1
(
    c1 CHAR(10)
);

我们在创建列时未指定其字符集和排序规则。我们也没有在 table 级别指定字符集和排序规则。在这种情况下,MySQL 将检查数据库级别以确定 table 设置,此后该 table 设置将成为列设置。)因此,第c1列的字符集为latin2,其排序规则为latin2_czech_ci