前言
身为一名前端工程师, 对于 SQL了解程度并不是很深刻, 盘点一些个人工作遇到的问题,给大家普及下知识, 以及记录自己如何解决这些问题的.
导航
相信这是一个非常常见的问题了, 而这个问题的原因主要还是表字符集引起的.
假设存在config表结构:
Field
Type
Allow Null
Default Value
key
varchar(255)
No
value
varchar(255)
No
id
int(11)
No
表内数据如下:
key
value
id
VERSION
1.0.1
1
version
2.0.1
2
执行语句为:
SELECT `key`,`value` FROM config WHERE `key` = 'version' LIMIT 1;
期待结果:
key
value
version
2.0.1
执行结果:
key
value
VERSION
1.0.1
为什么会有这种现象?
mysql 默认对字符匹配排序大小写不敏感, 字段包括 varchar, char, text 内容. 如果要确实要区分大小写, 则在建表或者查表的时候使用 BINARY 属性. 二进制的 A 与 a 还是有区别的 ~~
解决方案1 : 修改sql语句
SELECT `key`,`value` FROM config WHERE `key` = binary('version') LIMIT 1;
或者
SELECT `key`,`value` FROM config WHERE binary `key` = 'version' LIMIT 1;
解决方案2 : 修改表结构
建表语句
CREATE TABLE `config` (
`key` BINARY varchar(255) NOT NULL,
`value` BINARY varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
修改表语句
ALTER TABLE `config` MODIFY COLUMN `key` varchar(255) BINARY NOT NULL;
以config表为例, 表内数据:
key
value
id
295697141@qq.com
1
username
我
2
SQ