MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑 ;如下面

Sql代码
insert into t values('A');

insert into t values('a');

当第二条执行的时候,如果是主键或者有唯一性约束的话,会发生

Sql代码 
Duplicate entry for XXX

更加迷惑的是下面的2条语句

Java代码 
insert into t values('~');

insert into t values('y');

也会发生插入错误。

在查询的时候也会出现这样的问题

Java代码 
/* 查询的结果一眼 */
select * from t where a like 'a%'
select * from t where a like 'A%'

/* 下面的查询结果也是一样 */
select * from t where a = 'y';
select * from t where a = ''~;

1.问题产生的原因

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

1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;

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

MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,这个字符集对大小写不敏感,因此在比较过程中中文编码字符大小写转换造成了这种现象。

2.解决办法

A.表名区分大小写

在my.conf加入:
ower_case_table_names = 0
其中 0:区分大小写,1:不区分大小写

B.插入查询时区分大小写

字段值需要设置BINARY属性,即可区分大小写。

设置的方法有多种:
创建时设置:
CREATE TABLE T(
A VARCHAR(10) BINARY
);

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

mysql table editor中直接勾选BINARY项。

oracle中分为两种情况,单纯的sql语句不区分大小写,但是如果查询某个字符的话就需要区分大小写。

1、如以下情况,是不区分大小写的,查询结果都是一致的:

select from emp;
SELECT FROM EMP;

2、如在emp表中查询ename为“SMITH”(不含引号)的信息,就必须注意大小写:

select from emp where ename='SMITH';

这样是有结果的,如图:

select from emp where ename='smith';

这样则查询不出结果:

MYSQL和oracle 大小写问题的更多相关文章

  1. 【Mysql】MySQL与Oracle的大小写问题

    转载来源:http://aofengblog.blog.163.com/blog/static/63170212010101065030136/ MySQL与Oracle在大小写处理上的区别: 1MY ...

  2. 三分钟带你分清Mysql 和Oracle之间的误区

    摘要:Mysql 和Oracle,别再傻傻分不清. mysql 和Oracle 在开发中的使用是随处可见的,那就简单去了解一下这俩款火的不行的数据库. 本质区别: Oracle数据库是一个对象关系数据 ...

  3. 【无私分享:ASP.NET CORE 项目实战(第十二章)】添加对SqlServer、MySql、Oracle的支持

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 增加对多数据库的支持,并不是意味着同时对多种数据库操作,当然,后面,我们会尝试同时对多种数据库操作,这可能需要多个上下文,暂且 ...

  4. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

  5. MySql类似Oracle的dual虚拟表

    在mysql里也存在和oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用. 你可千万注意了: select * f ...

  6. MySQL与Oracle的主要区别

    Mysql与Oracle区别 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. ...

  7. MySql和Oracle的日期转换到底有哪些不同?我们来比较一下

    1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yy ...

  8. 数据库MySQL与Oracle的一些去O注意项

    一.oracle递归查询语句start with ...connect by prior ① 给你一张表,表里面有主键id,以及该项的父节点parent_id,查询出该表中所有的父子关系节点树? Or ...

  9. Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver

    此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源 ...

随机推荐

  1. UVA11401-Triangle Counting-递推

    给出一个数字n,计算从1到n能组成几个不同的三角形. n的范围是10^6,大概就是递推吧.从F[i-1]到F[i]可以线性求出.要注意结果超出int. #include <cstdio> ...

  2. python的多线程到底有没有用?

    在群里经常听到这样的争执,有人是虚心请教问题,有人就大放厥词因为这个说python辣鸡.而争论的核心无非就是,python的多线程在同一时刻只会有一条线程跑在CPU里面,其他线程都在睡觉.这是真的吗? ...

  3. 自学Linux Shell11.6-退出shell

    点击返回 自学Linux命令行与Shell脚本之路 11.6-退出shell shell运行的每一个命令都是使用 退出状态码 告诉shell它已经运行完毕.退出状态码是一个0~255的整数值,在命令结 ...

  4. 自学Linux Shell18.3-sed实用工具

    点击返回 自学Linux命令行与Shell脚本之路 18.3-sed实用工具 1. 加倍行间距 命令格式: .......

  5. 自学Zabbix3.12.6-动作Action-Escalations配置

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 3.12.6 自学Zabbix3.12.6-动作Action-Escalations配置 1. 概 ...

  6. luogu4932 浏览器 (拆)

    分析1的个数的奇偶性: 奇xor奇=偶xor偶=偶 奇xor偶=奇 所以只要统计1的个数是奇数的数的个数 和 是偶数的个数 乘一起就行了 直接用bitset来做,虽然常数很小/数据随机可以过,但复杂度 ...

  7. luogu2279 消防局的设立 (贪心)

    按点的深度从大到小排序,每次取出深度最大的那个点,如果它还没被覆盖,就在它爷爷上放一个消防局,这样一定是最优的 为了判定是否被覆盖,可以记录从某点的子树中到这个点的最近消防局的距离dis[](如果没有 ...

  8. Nginx入门篇

    Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 ...

  9. 再次膜拜IE的超强兼容性

    今天用firefox和chrome打开几年前写的一个网页,突然发现复选框的“全选”功能失效了. 然后用ie试了一下,竟然正常. 到firefox的错误控制台查看,提示错误: TypeError: id ...

  10. Top sort 双队列

    #include<iostream> #include<vector> #include<queue> using namespace std; ]; int ma ...