第26期 MySQL区分大小写

来源:这里教程网 时间:2026-03-01 18:29:53 作者:

MySQL 数据库 中,大小写敏感性可能会影响到数据库的操作和管理。了解如何设置不区分大小写对于开发者和管理员来说至关重要。本文将指导您如何在不同环境中配置MySQL以实现大小写不敏感。 MySQL大小写涉及到两个方面: 1、 MySQL的表名、列名以及数据库名的大小写,参数 lower_case_table_names 2、对于存储的数据内容(即表中的数据),这取决于所使用的字符集和排序规则。 关于 MySQL的表名、列名以及数据库名的大小写的设置 参数lower_case_table_names 是一个 MySQL 配置选项,它决定了 MySQL 数据库 中表名和数据库名的大小写敏感性。这个选项有三种可能的取值:0、1 和 2。下面是它们的含义:     0:这是默认值。在这种情况下,表名和数据库名是区分大小写的。这意味着 MyTable 和 mytable 是两个不同的表名。     1:这个值表示表名和数据库名将被存储为小写,并且比较时也会被转换为小写。这样, MyTable 和 mytable 将被视为相同的表名。     2:这个值在 Windows 系统上不可用,并且在其他系统上会被忽略。它的行为类似于 1,不同之处在于 文件系统不会被要求区分大小写。 关于存储的数据内容(即表中的数据)大小写设置

如果你想让MySQL在存储和检索数据时区分大小写,可以通过以下步骤实现:

  1. 选择合适的字符集:确保数据库、表或列使用的字符集支持大小写敏感。例如, utf8mb4_bin是一个区分大小写的字符集。
  2. 设置排序规则:排序规则(Collation)决定了如何比较和排序字符。选择一个区分大小写的排序规则,如 utf8mb4_bin。
  3. 修改数据库、表或列的字符集和排序规则:可以使用 ALTER DATABASE、 ALTER TABLE或 ALTER COLUMN语句来修改相应的字符集和排序规则。
  4. 使用binary关键字:可以使用binary关键字来强制区分大小写。
-- 修改数据库的字符集和排序规则
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
-- 修改表的字符集和排序规则
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
-- 修改列的字符集和排序规则
ALTER TABLE mytable MODIFY mycolumn VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

举一个详细的示例

CREATE TABLE `bank` (
  `bank_id` int(11) NOT NULL AUTO_INCREMENT,
  `bank_code` varchar(20) DEFAULT NULL,
  `bank_name` varchar(20) NOT NULL COMMENT '银行名称',
  `locale` varchar(10) DEFAULT 'zh_CN',
  `is_deleted` char(1) DEFAULT 'n',
  `create_user` int(11) DEFAULT NULL,
  `update_date` datetime DEFAULT NULL,
  `update_user` int(11) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  PRIMARY KEY (`bank_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='银行信息';
INSERT INTO `bank` (`bank_id`, `bank_code`, `bank_name`, `locale`, `is_deleted`, `create_user`, `update_date`, `update_user`, `create_date`) VALUES (195, 'hn', '湖南银行', 'zh_CN', 'n', NULL, '2025-01-01 15:40:27', NULL, '2025-01-01 15:40:27');
INSERT INTO `bank` (`bank_id`, `bank_code`, `bank_name`, `locale`, `is_deleted`, `create_user`, `update_date`, `update_user`, `create_date`) VALUES (196, 'HN', '湖南银行', 'zh_CN', 'n', NULL, '2025-01-01 15:40:27', NULL, '2025-01-01 15:40:27');
select * from bank where bank_code='hn';
select * from bank where bank_code='HN';

因此,MySQL默认是不会对字段的值区分大小写的。所以我们就要用到 binary关键字来强制区分大小写。 binary使用时只需在查询的条件前面加上它就可以。看例子:

select * from bank where binary bank_code='hn';
select * from bank where binary bank_code='HN';

修改表的字符集和排序规则 

ALTER TABLE bank MODIFY bank_code VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_bin;
select * from bank where  bank_code='hn';
select * from bank where  bank_code='HN';

相关推荐