mysql 支持的字符集

MySQL 服务器可以支持多种字符集,在同一台服务器、同一个数据库、甚至同一个表的不同字段都可以指定使用不同的字符集,相比 Oracle 等其他数据库管理系统,在同一个数据库只能使用相同的字符集, MySQL 明显存在更大的灵活性。

查看所有可用的字符集的命令是 show character set :

mysql> show character set;

+----------+-----------------------------+---------------------+--------+

| Charset | Description | Default collation | Maxlen |

+----------+-----------------------------+---------------------+--------+

| dec8 | DEC West European | dec8_swedish_ci | 1 |

| cp850 | DOS West European | cp850_general_ci | 1 |

| hp8 | HP West European | hp8_english_ci | 1 |

| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |

……

或者查看 information_schema.character_set ,可以显示所有的字符集和该字符集默认的校对规则。

mysql> desc information_schema.character_sets;

+----------------------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------------------+-------------+------+-----+---------+-------+

| CHARACTER_SET_NAME | varchar(64) | NO | | | |

| DEFAULT_COLLATE_NAME | varchar(64) | NO | | | |

| DESCRIPTION | varchar(60) | NO | | | |

| MAXLEN | bigint(3) | NO | | 0 | |

+----------------------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

MySQL 的字符集包括字符集( CHARACTER )和校对规则( COLLATION )两个概念。字符集和校对规则是一对多的关系, MySQL 支持 30 多种字符集的 70 多种校对规则。

每个字符集至少对应一个校对规则。可以用“ SHOW COLLATION LIKE '***'; ”命令或者查看 information_schema.COLLATIONS 。查看相关字符集的校对规则。

mysql> SHOW COLLATION LIKE 'gbk%';

+----------------+---------+----+---------+----------+---------+

| Collation | Charset | Id | Default | Compiled | Sortlen |

+----------------+---------+----+---------+----------+---------+

| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 |

| gbk_bin | gbk | 87 | | Yes | 1 |

+----------------+---------+----+---------+----------+---------+

2 rows in set (0.00 sec)

校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,一个说明性后缀,如 _ci 后缀,表示大小写不敏感, _cs 后缀,表示大小写敏感, _bin 后缀表示二进制代码比较,即比较是基于字符编码的值而与 language 无关等。

例如,上面例子中 GBK 的校对规则,其中 gbk_chinese_ci 是默认的校对规则,大小写不敏感的, gbk_bin 按照编码的值进行比较,是大小写敏感的。

下面的这个例子中,如果指定 'A' 和 'a' 按照 gbk_chinese_ci 校对规则进行比较,则认为两个字符是相同的,如果按照 gbk_bin 校对规则进行比较,则认为两个字符是不同的。我们事先需要确认应用的需求,是需要按照什么样的排序方式,是否需要区分大小写,以确定校对规则的选择。

mysql> select case when 'A' COLLATE gbk_chinese_ci = 'a' collate gbk_chinese_ci then 1 else 0 end;

+--------------------------------------------------------------------------------------+

| case when 'A' COLLATE gbk_chinese_ci = 'a' collate gbk_chinese_ci then 1 else 0 end |

+--------------------------------------------------------------------------------------+

| 1 |

+--------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select case when 'A' COLLATE gbk_bin = 'a' collate gbk_bin then 1 else 0 end;

+------------------------------------------------------------------------+

| case when 'A' COLLATE gbk_bin = 'a' collate gbk_bin then 1 else 0 end |

+------------------------------------------------------------------------+

| 0 |

+------------------------------------------------------------------------+

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java海洋

你的鼓励,是我写下去的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值