Django的Charfield字段在Mysql环境的大小写都通过对比的问题

57 阅读1分钟

前提:

通过django的orm将数据写入mysql的时候发现Charfield字段的数据写入的时候是小写的,但是通过

models.object.filter(username=username)

对mysql进行查询的时候发现无论是大写的还是小写的都能通过校验并且能返回一个queryset对象。 通过查资发现跟mysql的字符集和排序规则有关。

Mysql默认的字符集和排序规则是utf8mb4和utf8mb4_general_ci。 utf8mb4_general_ci是对大小写不敏感的。

解决办法

因为我使用Navicat,所以可以直接使用图形化界面的方法修改

1.点击设计表

image.png

2.将你需要区分大小写的字段的排序规则修改成utf8mb4_bin

image.png

3.保存重启mysql.

ps.如果你的Navicat连接不上你服务器的Mysql,并提示

# Can‘t connect to MySQL server on ‘localhost‘ (10061)

你可以去检查一下你服务器的防火墙是否开启,关闭了就能连接了。