美文网首页
Mysql不区分大小写问题

Mysql不区分大小写问题

作者: 愤愤的有痣青年 | 来源:发表于2020-10-27 16:51 被阅读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)
    

    相关文章

      网友评论

          本文标题:Mysql不区分大小写问题

          本文链接:https://www.haomeiwen.com/subject/nzrxvktx.html