Mysql和Oracle中存在的差异(小细节)
-
oracle中取别名时要用双引号,否则全大写——(mysql加不加引号都一样,取决于写的时候是大小写),oracle–而这双引号不能直接select ”Aa“ from dual,只能做别名时用双引号(别名不用双引号则默认都大写且别名不能使用单引号)。单引号可以直接select ‘Aa’ from dual,单引号再做条件时是区分大小写的。
-
oracle中的空字串 is null是true 即select 1 from dual where ‘’ is null 返回1 ,select nvl(‘’,‘NULL’) from dual 返回’NULL’。——mysql为false
sql-server Oracle 认为空字符串为 NULL,而 SQL Server 不认为 - 如何最好地处理?-IGI (igiftidea.com)
这一特性导致数据从其他数据库迁移到oracle中时,可能会发生问题,比如sql server非空字段存放了空字符串,而到oracle则变成了null导致报错,
a.这时可以通过增加一列,将空字串变成Empty或等其他方式空格等表示。
b.再或者从源头解决,在sqlserver中给对应字段添加约束check不允许存空字符串。
c.删除oracle该字段非空约束
如果某列存在 NULL 值时,执行非等于查询(<>/!=)会导致为NULL值的结果丢失
a.通过or条件加上is null判断 /ifnull(field,0)
-
mysql日期与字符串可以直接进行比较
-
窗口函数mysql8.0之前不支持
-
版本查看
mysql: select version() /@@version
oracle:select * from product_component_version
-
group bymysql版本在5.7及以下时,采用的是宽松模式,关闭了ONLY_FULL_GROUP_BY,即在mysql5.7版本及之前使用groupby,select中的字段不用全在group by也可以,相同的会被直接忽略。
待补充。。