每个“字符”列(即类型为
        CHAR、
         VARCHAR、
        TEXT类型或任何同义词的列)都有一个列字符集和一个列排序规则。和的列定义语法具有用于指定列字符集和排序规则的可选子句
      CREATE TABLE:
        ALTER TABLE
col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]col_name {ENUM | SET} (val_list)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]例子:
CREATE TABLE t1
(
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_german1_ci
);
ALTER TABLE t1 MODIFY
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;MySQL 通过以下方式选择列字符集和排序规则:
- 如果同时指定了和 ,则使用字符集 和排序规则 。 - CHARACTER SET- charset_name- COLLATE- 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;- 为列指定了字符集和排序规则,因此使用它们。该列有 character set - utf8和 collation- utf8_unicode_ci。
- 如果没有指定,则使用字符集 及其默认排序规则。 - CHARACTER SET- charset_name- COLLATE- charset_name- CREATE TABLE t1 ( col1 CHAR(10) CHARACTER SET utf8 ) CHARACTER SET latin1 COLLATE latin1_bin;- 为列指定了字符集,但没有指定排序规则。该列具有字符集 - utf8和 的默认排序规则- utf8,即- utf8_general_ci. 要查看每个字符集的默认排序规则,请使用- SHOW CHARACTER SET语句或查询- INFORMATION_SCHEMA- CHARACTER_SETS表。
- 如果没有指定,则使用关联的字符集 和排序规则 。 - COLLATE- collation_name- CHARACTER SET- collation_name- collation_name- CREATE TABLE t1 ( col1 CHAR(10) COLLATE utf8_polish_ci ) CHARACTER SET latin1 COLLATE latin1_bin;- 为列指定了排序规则,但没有指定字符集。该列具有排序规则 - utf8_polish_ci,字符集是与排序规则关联的字符集,即- utf8.
- 否则(既未指定 - CHARACTER SET也未- COLLATE指定),使用表字符集和排序规则。- CREATE TABLE t1 ( col1 CHAR(10) ) CHARACTER SET latin1 COLLATE latin1_bin;- 没有为列指定字符集和排序规则,因此使用表默认值。该列有 character set - latin1和 collation- latin1_bin。
CHARACTER SETand
        COLLATE子句是标准 SQL
       
        。
        如果您使用ALTER TABLE将列从一种字符集转换为另一种字符集,MySQL 会尝试映射数据值,但如果字符集不兼容,则可能会丢失数据。