MySQL的大小写区分问题

最近发现一个问题,一般在用户注册登录时我们需要考虑屏蔽用户大小写问题,比如用户aa和Aa我们应该认为是一样的,这个时候就会涉及到一个登录注册流程的处理问题,也许你不熟悉MySQL的默认设置会想到在程序段就行屏蔽过滤,陈捷之前也考虑过这样处理,不过后来测试发现其实MySQL本身对于列名也就是我们说的字段的值的大小写是屏蔽的。

举个例子,大家看下图,我搜索的是大写,但是小写也会出现。20141203112923

 

 

 

 

 

所以我们在处理登录注册时对用户名,手机或者邮箱等做唯一性验证的时候可以不需要考虑用户输入的大小写问题,因为数据库本身已经实现了。

上面的数据库列名在win好linux下都是不区分大小写的,但是还有一些配置是区分的,我们需要特别注意,以下内容是陈捷从网上搜集整理,大家可以参考下。

1、linux下MySQL安装完后是默认:区分表名的大小写,不区分列名的大小写;

2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;

lower_case_table_names参数详解:

lower_case_table_names = 0

其中 0:区分大小写,1:不区分大小写

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

MySQL在Windows下都不区分大小写。

3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:

A、创建时设置:
CREATE TABLE T(
A VARCHAR(10) BINARY
);

B、使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;

C、mysql table editor中直接勾选BINARY项。

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据