问题描述
测试人员在测试注册功能时,提示账号JackyWang已存在。
原因分析:
后台查看数据库,用户表中并没有用户JackyWang,但是存在jackywang,大概率是mysql数据库大小写不敏感,将小写的jackywang等同于大写的JackyWang了。
解决方案:
经查看相关资料,mysql可能因为编码格式或者配置文件修改大小写敏感配置。
1、查看当前的编码格式信息
可以通过命令SHOW VARIABLES LIKE 'character_set_server’查看字符格式,不过不够详细。比如UTF8的编码格式下,默认是utf8_general_ci,也可以是utf8mb4_bin(注意这里提到了这两种编码,后面要考)
通过命令show full columns from 表名,可以查看表中各字段的详细编码信息:
笔者用的是HeidiSQL客户端,可以双击表,直接查看表结构即可显示详细编码信息:
2、修改编码格式实现大小写敏感问题。
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE UTF8MB4_BIN;
(备注:执行前最好备份所在表数据,出现乱码或者未知情况时还能还原数据,笔者采用此方案,执行完并无异常)。
如果是要修改数据库:
ALTER DATABASE 库名 CHARACTER SET utf8mb4 COLLATE UTF8MB4_BIN;
3、设置默认大小写敏感配置
在配置文件/etc/my.cnf中[mysqld]下添加lower_case_table_names = 1
vim /etc/my.cnf
4、不同环境,不同版本会有差异,大体思路是类似的。