10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

10.3.5列字符集和排序规则

每一个字符列(即类型的列字符VARCHAR,一个文本类型或任何同义词)具有列字符集和列排序规则。的列定义语法创建表而且ALTER TABLE具有用于指定列字符集和排序规则的可选子句:

col_name{char | varchar | text} (col_length)[字符集charset_name][核对collation_name

这些从句也可以用于枚举而且列:

col_name{enum | set} (val_list)[字符集charset_name][核对collation_name

例子:

CREATE TABLE t1 (col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci);修改col1 VARCHAR(5)字符集latin1

MySQL按照以下方式选择列字符集和排序:

  • 如果两个字符集charset_name而且核对collation_name是否指定,字符集charset_name和排序collation_name使用。

    CREATE TABLE t1 (col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci) CHARACTER SET latin1 COLLATE latin1_bin;

    字符集和排序规则是为列指定的,因此使用它们。列具有字符集use utf8和排序utf8_unicode_ci

  • 如果字符集charset_name没有指定核对,字符集charset_name和它的默认排序规则。

    CREATE TABLE t1 (col1 CHAR(10) CHARACTER SET utf8) CHARACTER SET latin1 COLLATE latin1_bin;

    为列指定了字符集,但没有指定排序规则。列具有字符集use utf8和默认的排序规则use utf8,这是utf8_general_ci.要查看每个字符集的默认排序规则,请使用显示字符集语句或查询INFORMATION_SCHEMACHARACTER_SETS表格

  • 如果核对collation_name没有指定字符集的字符集collation_name和排序collation_name使用。

    CREATE TABLE t1 (col1 CHAR(10) COLLATE utf8_polish_ci) CHARACTER SET latin1 COLLATE latin1_bin;

    为列指定了排序规则,但没有指定字符集。这列有排序规则utf8_polish_ci字符集是与排序相关的,也就是use utf8

  • 否则(既不字符集也不核对),则使用表字符集和排序规则。

    CREATE TABLE t1 (col1 CHAR(10)) CHARACTER SET latin1 COLLATE latin1_bin;

    没有为列指定字符集或排序规则,因此使用表默认值。列具有字符集latin1和排序latin1_bin

字符集而且核对子句是标准的SQL。

如果你使用ALTER TABLE为了将一个列从一个字符集转换为另一个字符集,MySQL尝试映射数据值,但如果字符集不兼容,可能会导致数据丢失。