写点什么

数据类型

用户头像
在即
关注
发布于: 2021 年 03 月 15 日
数据类型

二进制方式比较字符串

如何在 CHAR、VARCHAR、TEXT 类型的字符串比较时严格区分大小写?

方式 1:使用 BINARY 关键字:

① 直接测试比较结果

SELECT 'a ' = 'A'; # 比较结果:1(相等)

SELECT BINARY 'a' = 'A', 'a' = BINARY 'A'; # 比较结果:0(不相等)

SELECT BINARY 'A ' = 'A'; # 比较结果:0(不相等)

SELECT BINARY 'A' = 'A', 'A' = BINARY 'A'; # 比较结果:1(相等)


在字段名或某个值的前面加上 BINARY 转换为二进制


② 在查询条件中进行二进制比较

CREATE TABLE my_char (c CHAR(2));

INSERT INTO my_char VALUES('A');

SELECT c FROM my_char WHERE c = 'a '; # 查询结果为“A”

SELECT c FROM my_char WHERE BINARY c = 'a'; # 查询结果为空

SELECT c FROM my_char WHERE BINARY c = 'A '; # 查询结果为空

SELECT c FROM my_char WHERE BINARY c = 'A'; # 查询结果为“A”


方式 2:设置字段的校对集

更改校对集实现区分大小写:

latin1:latin1_bin

gbk:gbk_bin

utf8:utf8_bin


① 创建表时设置字段的校对集

CREATE TABLE my_char (

c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_bin,

c2 CHAR(2) CHARACTER SET gbk COLLATE gbk_bin,

c3 CHAR(2) CHARACTER SET utf8 COLLATE utf8_bin

);

② 插入测试数据

INSERT INTO my_char VALUES('A', 'A', 'A');

③ 查询测试

SELECT c1 = 'a', c2 = 'a', c3 = 'a' FROM my_char; # 结果:0(不相等)

SELECT c1 = 'A', c2 = 'A', c3 = 'A' FROM my_char; # 结果:1(相等)

SELECT c1 = 'A ',c2 = 'A ',c3 = 'A ' FROM my_char; # 结果:1(相等)

在比较时仍会忽略字符串末尾的空格


ENUM 使用示例

① 创建表

mysql> CREATE TABLE my_enum (gender ENUM('male', 'female'));

② 插入两条测试记录

mysql> INSERT INTO my_enum VALUES('male'), ('female');

③ 查询记录,查询结果为“female”

mysql> SELECT * FROM my_enum WHERE gender = 'female';

④ 插入枚举列表中没有的值测试

mysql> INSERT INTO my_enum VALUES('m');

ERROR 1265 (01000): Data truncated for column 'gender' at row 1


SET 类型:保存字符串对象

SET('值 1', '值 2', '值 3', …, '值 n')

SET 与 ENUM 的区别:

它可以从列表中选择一个或多个值来保存,多个值之间用逗号“,”分隔。


SET 使用示例


① 创建表

mysql> CREATE TABLE my_set (hobby SET('book', 'game', 'code'));

② 插入 3 条测试记录

mysql> INSERT INTO my_set VALUES(''), ('book'), ('book,code');

③ 查询记录,查询结果为“book,code”

mysql> SELECT * FROM my_set WHERE hobby = 'book,code';

收尾!

发布于: 2021 年 03 月 15 日阅读数: 8
用户头像

在即

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
数据类型