MySQL 8.0版本说明
MySQL 8.0源代码文档10bet官方网站
每一个”字符”列(即类型的列字符
,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_SCHEMA
CHARACTER_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尝试映射数据值,但如果字符集不兼容,可能会导致数据丢失。