Mysql不区分大小写问题

2020-10-27  本文已影响0人  愤愤的有痣青年

问题

脚本往mysql中插入数据时突然报错,提示键冲突,但是在代码中我已经用集合过滤掉了以前插入的数据,按理来说是不会出现冲突的.

排查

输入插入异常的数据,去数据库中查询,确实能查到,开始以为是自己的过滤逻辑有问题,可再三确认后都没有问题,于是仔细查看异常的数据与匹配到的数据,发现其大写小有区别.于是问题集中到了mysql的大小写问题上了.

解决

对于已经创建的表,网上找到的版本是修改表的字符集,将其修改为utf8_bin的形式,如下语句

ALTER TABLE `your_table` COLLATE = utf8mb4_bin;

但是修改后并未生效,后来了解到这里修改后只会对新创建的数据生效.

于是又找到如下语句修改字段的字符集

ALTER TABLE your_table MODIFY `your_field` VARCHAR ( 255 ) BINARY;

其中重点在BINARY这个关键字

扩展

由于我是使用sqlalchemy创建的表,因此不可能每次创建表后还要手动去改这些参数,于是在网上我又找到了如下办法

class MyTable(db.Model):
         __table_args__ = {'mysql_collate': 'utf8mb4_bin'}
db.Column(db.String(20,collation='utf8mb4_bin'), nullable=False)
上一篇下一篇

猜你喜欢

热点阅读