MySQL字符集和校对规则对查询的影响分析

0 下载量 16 浏览量 更新于2024-08-31 收藏 91KB PDF 举报
MySQL 中查询的有关英文字母大小写问题的分析 MySQL 数据库在进行查询时,有时候是英文字母大小写敏感的,有时候又不是的,主要是由 MySQL 的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的。 **什么是字符集和校验规则?** 字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则。要想列出一个字符集的校对规则,使用 SHOW COLLATION 语句。 **校对规则的特征** 校对规则一般有这些特征: * 两个不同的字符集不能有相同的校对规则。 * 每个字符集有一个默认校对规则。例如,utf8 默认校对规则是 utf8_general_ci。 * 存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以 _ci(大小写不敏感)、_cs(大小写敏感)或 _bin(二元)结束。 **不同级别的字符集和校验规则可控制大小写敏感** MySQL 5.1 在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合定义字符串。字符集和校对规则有 4 个级别的默认设置:服务器级、数据库级、表级和连接级。 **服务器级** MySQL 按照如下方法确定服务器字符集和服务器校对规则: * 修改配置文件 /etc/my.cnf * 在 [mysqld] 下添加:collation_server=utf8_bin * 重启实例 更改服务器级的校验规则(collation_server)后,数据库校验规则(collation_collation)默认会继承服务器级的。 **注意** * 这个只适用于在重新启动之后,新建的库,已存在的库不受影响。 * 同样的,即使库的校验规则改了,已经存在的表不受修改影响; * 同理与已经存在的列… **实践示例** mysql> create database yutest0; Query OK, 1 row affected (0.00 sec) mysql> use yutest0; Database changed mysql> create table t1 (name varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values ('AAA'); Query OK, 1 row affected (0.00 sec) mysql> insert into t1 values ('aaa'); Query OK, 1 row affected (0.00 sec) **小结** MySQL 中查询的有关英文字母大小写问题的分析,主要是由 MySQL 的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的。字符集和校验规则是 MySQL 中非常重要的概念,它们控制着字符串的比较和排序规则。了解字符集和校验规则的特征和使用方法,对 MySQL 数据库的设计和使用非常重要。