优秀的编程知识分享平台

网站首页 > 技术文章 正文

记一次mysql的collate编码引起大小写区分的问题

nanyue 2025-07-08 21:49:26 技术文章 1 ℃

创建mysql的表时,如果collate选择uft-8_general_ci ,则表示一般比较,不区分大小写,

而选择utf8-bin表示严格区分大小写。

我们将collate称为排序规则,创建表时,一般会选择排序规则,列的排序规则默认与表的相同


CREATE TABLE `t_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  `name` text  NOT NULL  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8_unicode_ci;


CREATE TABLE `t_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  `name` text  NOT NULL  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8_bin;


当collate=uft-8_general_ci

对应的效果是:

SELECT * from t_user where name='abc'; 
与
SELECT * from t_user where name='Abc';


效果一致,不区分大小写

当collate=uft8-bin

SELECT * from t_user where name='abc'; 
与
SELECT * from t_user where name='Abc';

查询的效果不同


值得注意的是,列可以选择自己的collate,列的优先级高于表的collate优先级,通过navicate可以设置表和列的collate,如下图



表的collate的设置


最近发表
标签列表