Oj wybredny jest parser zapytań w MySQL, wybredny. SUM (a)
w SELECT
jak najbardziej przechodzi, ale w CREATE VIEW xxx AS SELECT
już nie. Przy tworzeniu perspektywy baza odmawia współpracy komunikatem "funkcja nazwatabeli.SUM nie istnieje". Chodzi o to, że spacja pomiędzy SUM
a nawiasem otwierającym jest inaczej interpretowana przy zwykłym zapytaniu a inaczej przy tworzeniu perspektywy - w pierwszym przypadku parser zaczyna od szukania funkcji nazwatabeli.SUM
a gdy jej nie znajdzie wywołuje zwykłe SUM
, w drugim przypadku od razu zgłasza błąd.
Sporo nerwów można stracić też przez inny "feature". MySQL w nazwach baz danych i tabel pozwala na znaki '_' i '-' oprócz zwykłych alfanumerycznych - ale takich tabel nie da się już użyć przy odwołaniu do kilku baz w jednym zapytaniu, bo parser ich po prostu nie znajdzie.
Kurde, a ja przepisywałem na kilka zapytań (w pętli)...
ReplyDeleteNo reguluje, ale MySQL tak niezupełnie zgadza się z ANSI SQL :-)
ReplyDeleteCo do nazw tabel, to moim ulubionym „featurem” jest to, że w MySQL pod Windows nazwy tabel są case insensitive, a pod Linuksem (i innymi uniksowatymi) są case sensitive (czy SQL tego nie reguluje?).
ReplyDeleteWięc program współpracujacy poprawnie z bazą odpaloną na windowsowej maszynie może odmówić współpracy po przemigrowaniu bazy na system uniksowaty.
Tego chyba nawet Oracle nie przebije… :)
Różnica polega na tym, że za zajmowanie się Oraclem mi płacą ;-)
ReplyDeleteOjej jak byś tak przeżył przygody z oraclem to byś nie narzekał na tę parę bugów.
ReplyDeleteNope. Sporo sposobów escapowania tych nazw wypróbowałem – skończyło się na zmianie nazw.
ReplyDeleteDo ostatniej części notki – a ujęcie nazw tabel w ukośne uszy (`) nie przynosi rezultatów?
ReplyDelete