在MariaDB中设置表的字符集和排序规则

发布于

您可以在 MariaDB 中指定不同级别的字符集和排序规则。可以在连接级别、服务器级别、数据库级别、表级别甚至列级别指定它们。

还可以在查询中指定排序规则,以便它覆盖以前在上述级别指定的任何排序规则。

若要在表级别设置字符集和排序规则,请使用语句或语句(具体取决于是创建表还是修改表)。CREATE TABLE``ALTER TABLE

创建表时

下面是在创建表时设置排序规则和字符集的示例:

CREATE TABLE Products ( 
    ProductId CHAR(10), 
    ProductName VARCHAR(255) NOT NULL, 
    PRIMARY KEY (ProductId)) 
    CHARACTER SET latin1 
    COLLATE latin1_general_ci;

这将创建一个使用字符集和 的排序规则调用的表。Products``latin1``latin1_general_ci

更改现有表

下面是更改现有表上的排序规则和字符集的示例:

ALTER TABLE Products 
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;

它现在使用新的归类和字符集。

也可以省略以下部分:CONVERT TO

ALTER TABLE Products 
CHARACTER SET utf8 
COLLATE utf8_spanish_ci;

归类必须对字符集有效

同时设置归类和字符集时,需要确保归类对所选字符集有效,反之亦然。否则,将返回错误。

下面是对指定字符集使用无效排序规则进行指定的示例:

ALTER TABLE Products 
CHARACTER SET latin1 
COLLATE utf8_spanish_ci;

输出:

ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'

它告诉我们,我们选择的排序规则对于我们选择的指定字符集无效。

有关匹配归类和字符集的列表,请参阅 MariaDB 支持的归类的完整列表或 MariaDB 支持的字符集的完整列表。

仅指定归类或字符集

可以只指定排序规则或仅指定字符集(或两者都不指定):

  • 如果仅提供字符集,则将使用该字符集的默认排序规则。
  • 如果仅提供排序规则,则将使用关联的字符集。
  • 如果未提供归类或字符集,则使用表默认值。

转换为需要更多字节的字符集

For 或列,如果需要,更改数据类型以确保新列足够长以存储与原始列一样多的字符。VARCHAR``TEXT``CONVERT TO CHARACTER SET

例如,ascii 列要求每个字符一个字节,因此该列最多可容纳 65,535 个字符。如果将列转换为 utf8,则每个字符最多需要 3 个字节,因此该列将转换为(最大长度为 16,777,215),以便能够容纳相同数量的字符。TEXT``MEDIUMTEXT

如果不希望发生此类数据类型更改,请改用单个列。MODIFY

例如:

ALTER TABLE Products 
MODIFY ProductName VARCHAR(255) 
CHARACTER SET utf8; 

转换为二进制

CONVERT TO CHARACTER SET binary将分别将 和列转换为 和。CHAR``VARCHAR``TEXT``BINARY``VARBINARY``BLOB

完成此操作后,此类列将不再具有字符集。此外,它们将不再受未来报表的影响。CONVERT TO CHARACTER SET

检查 MariaDB 中的排序规则和字符集

有多种方法可以检查 MariaDB 中的排序规则和字符集,具体取决于您要检查的级别(服务器、数据库、表、列、连接等)。有关示例,请参阅在 MariaDB 中显示排序规则。