sql 集合的差 mysql_【MYSQL】业务上碰到的SQL问题整理集合

前言

身为一名前端工程师, 对于 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

email

295697141@qq.com

1

username

2

SQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值