# DB Couloumn reserverd keyword



## OnDemand (19. Mrz 2016)

Moin zusammen,

hab ein Problem.. Möchte ein stinknormales INSERT INTO machen, leider hat die Datenbank einige Spalten, die wie reservierte Keywords von mysql. Somit klappt es nicht. Habe schon versucht es zu maskieren mit oder "left" aber klappt nicht. Hat jemand ne Idee?

ZB:

INSERT INTO table(id, left, right, level) VALUES(1,15,23,0)

Danke vielmals!​


----------



## kneitzel (19. Mrz 2016)

Du kannst die Felder in "backticks" (`) oder in Quotes (") setzen.

Siehe dazu auch http://stackoverflow.com/questions/...words-used-as-column-names-mysql-create-table


----------



## OnDemand (19. Mrz 2016)

Hi kneitzel, nö geht leider nicht :/ Normale " und auch ' versucht 

EDIT: Jepp! Backticks klappt. Noch nie benutzt die Taste, endlich hat sie eine sinnvolle Funktion


----------



## kneitzel (19. Mrz 2016)

Für die " musst Du ANSI_QUOTES als mode setzen. Und Du musst aufpassen - das ist kein single quote sondern ein Backtick. Also nicht das ' welches Du wohl mit Shift # erzeugst sonder das ` welches auf der Taste mit den ´ und ` sein dürfte. (Kann natürlich je nach Tastaturlayout unterschiedlich sein.)


----------



## OnDemand (21. Mrz 2016)

Super danke! So viele verschiedene Zeichen. Hat jemand noch ne Idee, warum man keine SQL Funktionen in das Insert schrieben kann? Kann ich schon, nur passiert nix. ZB Eine spalte "currentDate" mit DateTime 000-00-00 00:00 Format und folgendem Insert:

INSERT into table (id, datetime) VALUES(1,CURRDATE())

In der DB kommt 0000-00-00 00:00 an


----------



## kneitzel (21. Mrz 2016)

Bitte bau so queries nicht als String auf. Das kann nur schief gehen. Datum ist ein super Beispiel, weil dies von einer Culture zur anderen unterschiedlich ist.

Statt dessen PreparedStatement nutzen und dann die Werte als Parameter übergeben.
https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html


----------



## OnDemand (21. Mrz 2016)

Prepeared Stmt geht leider nicht,darf nicht benutzt werden  Dann kann ich ja ein Date date = new Date nehmen und entsprechend formatieren oder?


----------



## kneitzel (21. Mrz 2016)

Ach so - ich habs falsch gesehen - Du hast Da ja die Funktion von MySQL aufrufen wollen. Da war mein Hinweis schlicht falsch / nicht angebracht!

Du hast da wohl ein R zuviel. CURDATE() heisst die gewünschte Funktion und nicht CURRDATE().
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html


----------



## OnDemand (21. Mrz 2016)

Ach ...  OK Danke, stimmt klappt super


----------



## kneitzel (21. Mrz 2016)

Ich selbst nutze MySQL nicht besonders viel, aber hier würde ich einmal prüfen, in wie weit Du mysql nicht so nutzen kannst, dass Fehler direkt als Fehler zurück kommen. Bei so einem falschen Aufruf würde ich immer eine Exception im Code (Also DB wirft einen Fehler) bevorzugen vor verfälschten Daten.

MySQL scheint da öfters mal Fehler "verzeihen" zu wollen, was die Datenbank in meinen Augen schon fast unbrauchbar macht (für professionelle Arbeiten). Hatten da vor nicht zu langer Zeit schon einen Thread wo der TE Probleme hatte, weil er nicht alle Pflichtfelder beim INSERT angegeben hatte was wohl auch schon funktioniert hatte und halt nur jetzt (auf Grund eines anderen Modus) Fehler brachte.

Also in so einen Modus darf man aus meiner Sicht eigentlich nie kommen. Evtl. willst Du das einmal etwas recherchieren oder frag in einem anderen Thread einmal nach wenn Du da nichts finden solltest. (Hättest Du da einen Fehler bekommen, dann hättest Du das ja im nu selbst gelöst denke ich mal!)


----------

