?mysql> select count(id) from parse_test;
?+-----------+
?| count(id) |
?+-----------+
?|? ? ? ? 2 |
?+-----------+
?1 row in set (0.00 sec)
?mysql> select count (id) from parse_test;
ERROR 1630 (42000): FUNCTION test.count does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
在Oracle中就没有任何问题了。
create table parse_test( id number, name varchar2(30));
?insert into parse_test values(1,'aa');
?insert into parse_test values(2,'bb');
?commit;
?select count(id)from parse_test;
? COUNT(ID)
?----------
? ? ? ? ? 2
?select count (id) from parse_test;
? COUNT(ID)
?----------
? ? ? ? ? 2
抛开Oracle解析复杂sql语句的优势,可以看出Oracle在这种细节方面确实支持的力度要高一些。
?不过最开始在MySQL出错的语句在放到Oracle里面(如果假设表结构数据都存在),也一定运行不了。原因就在于Oracle中定义的表明长度最大是30位,但是在MySQL中支持的要多不少,达64位。
mysql> create table events_waits_summary_by_thread_by_event_name567890123456789012345 ( id int, name varchar(30));
ERROR 1059 (42000): Identifier name 'events_waits_summary_by_thread_by_event_name567890123456789012345' is too long
?mysql> select length('events_waits_summary_by_thread_by_event_name567890123456789012345');
?+-----------------------------------------------------------------------------+
?| length('events_waits_summary_by_thread_by_event_name567890123456789012345') |
?+-----------------------------------------------------------------------------+
?|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 65 |
?+-----------------------------------------------------------------------------+
?1 row in set (0.01 sec)
当然了我也是到此为止我也是捡个小石头,弄点儿水花,对于sql解析器更深入的问题,如果细究,从MySQL代码层面能够分析出问题来就一个基本目标了。