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

创建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,如下图

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

列的collate

表的collate的设置

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

表的collate

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容