在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 中显示排序规则。