mysql设置校对规则_MySQL校对规则

在本教程中,您将了解MySQL校对规则以及如何设置MySQL服务器,数据库,表和列的字符集和校对规则。

MySQL校对规则简介

MySQL校对规则是用于比较特定字符集中的字符的一组规则。 MySQL中的每个字符集可以有多个校对规则,并且至少具有一个默认校对规则。两个字符集不能具有相同的归类。

MySQL提供了SHOW CHARACTER SET语句,查看字符集的默认校对规则,如下所示:

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

| Charset | Description | Default collation | Maxlen |

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

| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |

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

| latin1 | cp1252 West European | latin1_swedish_ci | 1 |

| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |

| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |

| ascii | US ASCII | ascii_general_ci | 1 |

| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |

| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |

| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |

| tis620 | TIS620 Thai | tis620_thai_ci | 1 |

| euckr | EUC-KR Korean | euckr_korean_ci | 2 |

| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |

| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |

| greek | ISO 8859-7 Greek | greek_general_ci | 1 |

| cp1250 | Windows Central European | cp1250_general_ci | 1 |

| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |

| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |

| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |

| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |

| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |

| cp866 | DOS Russian | cp866_general_ci | 1 |

| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |

| macce | Mac Central European | macce_general_ci | 1 |

| macroman | Mac West European | macroman_general_ci | 1 |

| cp852 | DOS Central European | cp852_general_ci | 1 |

| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |

| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |

| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |

| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |

| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |

| cp1256 | Windows Arabic | cp1256_general_ci | 1 |

| cp1257 | Windows Baltic | cp1257_general_ci | 1 |

| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |

| binary | Binary pseudo charset | binary | 1 |

| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |

| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |

| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |

| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |

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

41 rows in set

默认校对规则列的值指定字符集的默认校对规则。

按照惯例,字符集的校对规则以字符集名称开头,以_ci(不区分大小写)_cs(区分大小写)或_bin(二进制文件)结尾。

要获取给定字符集的所有校对规则,请使用SHOW COLLATION语句如下:

SHOW COLLATION LIKE 'character_set_name%';

例如,要获取latin1字符集的所有校对规则,请使用以下语句:

SHOW COLLATION LIKE 'latin1%';

执行上面语句,得到用于latin1字符集的MySQL校对规则,如下结果 -

mysql> SHOW COLLATION LIKE 'latin1%';

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

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

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

| latin1_german1_ci | latin1 | 5 | | Yes | 1 |

| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |

| latin1_danish_ci | latin1 | 15 | | Yes | 1 |

| latin1_german2_ci | latin1 | 31 | | Yes | 2 |

| latin1_bin | latin1 | 47 | | Yes | 1 |

| latin1_general_ci | latin1 | 48 | | Yes | 1 |

| latin1_general_cs | latin1 | 49 | | Yes | 1 |

| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |

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

8 rows in set

如上所述,每个字符集都具有默认校对规则,例如latin1_swedish_ci是latin1字符集的默认校对规则。

设置字符集和校对规则

MySQL允许您在四个级别指定字符集和校对规则:服务器,数据库,表和列。

在服务器级别设置字符集和校对规则

注意MySQL使用latin1作为默认字符集,因此,其默认校对规则为latin1_swedish_ci。 您可以在服务器启动时更改这些设置。

如果在服务器启动时仅指定一个字符集,MySQL将使用字符集的默认校对规则。 如果您明确指定了一个字符集和校对规则,MySQL将使用数据库服务器中的字符集和校对规则来创建的所有数据库。

以下语句通过命令行启动并设置服务器使用utf8字符集和utf8_unicode_cs校对规则:

$ mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

在数据库级别设置字符集和校对规则

创建数据库时,如果不指定其字符集和校对规则,MySQL将使用数据库的服务器的默认字符集和校对规则。

CREATE DATABASE database_name

CHARACTER SET character_set_name

COLLATE collation_name

-- 修改校对规则

ALTER DATABASE database_name

CHARACTER SET character_set_name

COLLATE collation_name

MySQL在数据库级使用数据库中创建的所有表的字符集和校对规则。

在表级别设置字符集和校对规则

数据库可能包含与默认数据库的字符集和校对规则不同的字符集和校对规则的表。

当您通过使用CREATE TABLE语句创建表或使用ALTER TABLE语句更改表的结构时,可以指定表的默认字符集和校对规则。

CREATE TABLE table_name(

)

CHARACTER SET character_set_name

COLLATE collation_name

或者 -

ALTER TABLE table_name(

)

CHARACTER SET character_set_name

COLLATE collation_name

在列级别设置字符集和校对规则

CHAR,VARCHAR或TEXT类型的列可以使用与表的默认字符集和校对规则不同的,自己指定的字符集和校对规则。

可以按照CREATE TABLE或ALTER TABLE语句的列定义中的列指定字符集和校对规则,如下所示:

column_name [CHAR | VARCHAR | TEXT] (length)

CHARACTER SET character_set_name

COLLATE collation_name

以下是设置字符集和校对规则的规则:

如果显式指定字符集和校对规则,则使用字符集和校对规则。

如果指定一个字符集并忽略校对规则,则使用字符集的默认校对规则。

如果指定没有字符集的校对规则,则使用与校对规则相关联的字符集。

如果省略字符集和校对规则,则使用默认字符集和校对规则。

我们来看一些设置字符集和校对规则的例子。

设置字符集和校对规则的示例

首先,我们使用utf8作为字符集创建一个新数据库,将utf8_unicode_ci作为默认校对规则:

CREATE DATABASE mydbdemo

CHARACTER SET utf8

COLLATE utf8_unicode_ci;

因为明确指定mydbdemo数据库的字符集和校对规则,所以mydbdemo数据库不会在服务器级别采用默认字符集和校对规则。

其次,我们在mydbdemo数据库中创建一个名为t1的新表,但不指定字符集和校对规则:

USE mydbdemo;

CREATE TABLE t1(

c1 char(25)

);

如上所示,我们并没有为t1表指定字符集和校对规则; MySQL将检查数据库级别以确定t1表的字符集和校对规则。 在这种情况下,t1表将使用utf8作为默认字符集,utf8_unicode_ci作为默认校对规则。

第三,对于t1表,我们将其字符集更改为latin1,并将其校对规则改为latin1_german1_ci:

ALTER TABLE t1

CHARACTER SET latin1

COLLATE latin1_german1_ci;

t1表中的c1列使用latin1作为字符集,latin1_german1_ci作为校对规则。

第四,将c1列的字符集更改为latin1:

ALTER TABLE t2

MODIFY c1 VARCHAR(25)

CHARACTER SET latin1;

现在,c1列使用latin1字符集,但是它的校对规则呢? 是否从表的校对规则继承了latin1_german1_ci校对规则? 不是的,因为latin1字符集的默认校对规则是latin1_swedish_ci,所以c1列具有latin1_swedish_ci校对规则。

在本教程中,您已经了解了MySQL校对规则以及如何为MySQL服务器,数据库,表和列指定字符集和校对规则。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值