字符集是什么:
字符集是指一种从二进制编码到某类字符符号的映射,每一类编码字符都有其对应的字符集和校对规则.每种字符集都可能有多种校对规则,并且都有一个默认的校对规则
校对是什么:
“校对”是指一组用于某个字符集的排序规则,对于校对规则通常需要考虑的一个问题是,是否以大小写敏感的方式比较字符串,或者是以字符串编码的二进制值来比较大小。它们对应的校对规则的前缀分别是_cs、_ci和_bin,根据需要很容易选择.
如何查看:
可以使用命令SHOW CHARACTER SET和SHOW COLLATION来查看MySQL支持的字符集和校对规则。
mysql如何比较字符串的大小:
如果比较的两个字符串的字符集不同,MySQL会先将其转成同一个字符集再进行比较。如果两个字符集不兼容的话,则会抛出错误.这种情况下需要通过函数CONVERT()显式地将其中一个字符串的字符集转成一个兼容的字符集。MySQL 5.0和更新的版本经常会做这样的隐式转换,所以这类错误通常是在MySQL 4.1中比较常见。
选择字符集和校对规则:
结合数据库中主要存储的内容,以及校对规则的需要来确定,比如如果存储的内容基本全是英文字符,那么可以全部使用UTF-8的字符集,如果需要区分大小写可以使用_cs结尾的校对规则等
问题1:如果设置的字符集是不区分大小写的如何让查询区分大小写呢?
两种方式:1.在查询的字段前面加上关键字BINARY,例如SELECT * FROM type WHERE BINARY msg_type='alarm';
2.在建表语句中添加关键字BINARY,这样查询和数据插入也会区分大小写,例如
CREATE TABLE `name_table` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '配置ID 自增主键',
`name_id` VARCHAR(64) BINARY NOT NULL DEFAULT '' COMMENT '姓名ID' ,
`create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '配置创建时间',
`update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '配置更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `name_id` (`group_id`) USING BTREE
)
COMMENT='姓名配置信息表'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
注:utf8mb4_general_ci是不区分英文字符大小写的utf8字符集,在无法更换的情况下,只能在列中添加关键字BINARY来处理.