10.3.5 列字符集和排序规则

官方文档地址:10.3.5 Column Character Set and Collation


每个“字符”列(也就是说,类型为CHARVARCHARTEXT类型或任何同义词的列)都有一个列字符集和一个列排序规则。CREATE TABLEALTER TABLE的列定义语法有指定列字符集和排序规则的可选子句:

col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]

这些子句也可以用于ENUMSET列:

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_nameCOLLATE 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;

为列指定了字符集和排序规则,因此它们被使用。该列具有字符集utf8和排序规则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

  • 没有指定字符集和排序规则,将使用表字符集和排序规则。
CREATE TABLE t1
(
    col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;

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

CHARACTER SETCOLLATE子句是标准 SQL。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值