欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

collate utf8_bin和uft-8_general_ci是什么意思? 有大用

在数据库建表时


collate utf_bin是 以二进制值比较,也就是区分大小写,collate是核对的意思

uft-8_general_ci  一般比较,不区分大小写


来自  https://blog.csdn.net/TomHaveNoCat/article/details/84635806



MySQL中存在多种格式的utf8编码,其中最常见的两种为:

  • utf8_bin

  • utf8_general_ci

utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写;
utf8_genera_ci不区分大小写,ci 为 case insensitive的缩写,即大小写不敏感,为utf8默认编码。

CREATE TABLE `t_bin` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
UNIQUE KEY `uk_name` (`name`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE `t_ci` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

CREATE TABLE `t_default` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert into t_bin values (1, 'Alex');	//可以插入
insert into t_bin values (2, 'alex');		//可以插入
 
insert into t_ci values (1, 'Alex');		//可以插入
insert into t_ci values (2, 'alex');		//[Err] 1062 - Duplicate entry 'alex' for key 'uk_name'

insert into t_default values (1, 'Alex');		//可以插入
insert into t_default values (2, 'alex');		//[Err] 1062 - Duplicate entry 'alex' for key 'uk_name'

最终t_bin表中会有两条记录,而t_cit_default表中,只有第一条记录。

分析:

  • 编码为utf8_bin时,Alex和alex被认为是两个不同的值,区分大小写;

  • 编码为utf8_general_ci时,即默认的编码时,Alex和alex被认为是相同的值,不区分大小写。

所以在选择编码的时候应该注意区分。

原文来源 https://www.cnblogs.com/zjfjava/p/7639535.html 。


来自   https://blog.csdn.net/She_lock/article/details/84648499?utm_medium=distribute.pc_relevant_t0.none-ta...

普通分类: