SQL Problem mit MySQL 5
am 13.06.2006 15:33:45 von Martin Haust
Hallo,
folgendes Problem habe ich:
Tabelle:
Field Type Null Key Default Extra
-------- ------------ ------- ------ ---------- --------
ID int(11) NO
Release varchar(100) YES (null)
1. SQL:
UPDATE tbltest SET `Release`='BLA' WHERE ID='1'
1 record(s) affected
2. SQL:
UPDATE tbltest SET Release='BLA' WHERE ID='1'
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'Release='BLA' WHERE ID='1'' at line 1
Nur der erste SQL mit den schrägen Hochkommas beim Feldnamen
funktioniert. Anscheinend auch nur bei dem Feldnamen "Release". Andere
Feldnamen funktionieren auch ohne schräge Hochkommas.
Hat jemand eine Idee?
Gruß
Martin
P.S.: Unter Mysql 4 funktionierte das, mit und ohne Hochkommas.
Re: SQL Problem mit MySQL 5
am 13.06.2006 15:38:08 von Christian Kirsch
Martin Haust schrieb:
....
>
> 2. SQL:
> UPDATE tbltest SET Release='BLA' WHERE ID='1'
>
> You have an error in your SQL syntax; check the manual that corresponds
> to your MySQL server version for the right syntax to use near
> 'Release='BLA' WHERE ID='1'' at line 1
>
....
> Hat jemand eine Idee?
>
Ja. Wie immer das Handbuch. Such nach 'reserved words' oder 'keywords'.
Re: SQL Problem mit MySQL 5
am 13.06.2006 23:40:10 von Dominik Echterbruch
Martin Haust wrote:
>
> Tabelle:
> Field Type Null Key Default Extra
> -------- ------------ ------- ------ ---------- --------
> ID int(11) NO
> Release varchar(100) YES (null)
>
> UPDATE tbltest SET `Release`='BLA' WHERE ID='1'
> UPDATE tbltest SET Release='BLA' WHERE ID='1'
Christian hat ja bereits den Zaunpfahl ausgepackt. Aber ganz nebenbei:
Eine Spalte vom Typ int erwartet ganze Zahlen, keine Strings. '1' ist
aber ein String und keine Zahl (jedenfalls erzählst du das MySQL).
Verwende eine einfache 1 ohne Anführungszeichen, wenn du eine einfache 1
haben möchtest. Die Datenbank wird es dir mit mehr Performance danken.
Grüße,
Dominik
--
Norbert Melzer in d.c.d.mysql:
F: Wie verstehe ich diese FAQ am besten?
A: Studieren Sie Datanbank-Design und lesen Sie anschliessend alles nochmal
Re: SQL Problem mit MySQL 5
am 14.06.2006 10:43:38 von Christian Schmelzer
Dominik Echterbruch wrote:
> Martin Haust wrote:
>>
>> Tabelle:
>> Field Type Null Key Default Extra
>> -------- ------------ ------- ------ ---------- --------
>> ID int(11) NO
>> Release varchar(100) YES (null)
>>
>> UPDATE tbltest SET `Release`='BLA' WHERE ID='1'
>> UPDATE tbltest SET Release='BLA' WHERE ID='1'
>
> Christian hat ja bereits den Zaunpfahl ausgepackt. Aber ganz nebenbei:
> Eine Spalte vom Typ int erwartet ganze Zahlen, keine Strings. '1' ist
> aber ein String und keine Zahl (jedenfalls erzählst du das MySQL).
> Verwende eine einfache 1 ohne Anführungszeichen, wenn du eine
> einfache 1 haben möchtest. Die Datenbank wird es dir mit mehr
> Performance danken.
>
>
> Grüße,
> Dominik
Hallo,
mal so grundsätzlich gefragt ob man den Performanceunterschied zwischen
ID='1' und ID=1 wirklich merkt. Ist MySQL nicht intelligent genug vor der
Ausführung selber eine Konvertierung zu machen?
Christian
Re: SQL Problem mit MySQL 5
am 14.06.2006 10:54:20 von Christian Kirsch
Christian Schmelzer schrieb:
> Dominik Echterbruch wrote:
>> Martin Haust wrote:
>>> Tabelle:
>>> Field Type Null Key Default Extra
>>> -------- ------------ ------- ------ ---------- --------
>>> ID int(11) NO
>>> Release varchar(100) YES (null)
>>>
>>> UPDATE tbltest SET `Release`='BLA' WHERE ID='1'
>>> UPDATE tbltest SET Release='BLA' WHERE ID='1'
>> Christian hat ja bereits den Zaunpfahl ausgepackt. Aber ganz nebenbei:
>> Eine Spalte vom Typ int erwartet ganze Zahlen, keine Strings. '1' ist
>> aber ein String und keine Zahl (jedenfalls erzählst du das MySQL).
>> Verwende eine einfache 1 ohne Anführungszeichen, wenn du eine
>> einfache 1 haben möchtest. Die Datenbank wird es dir mit mehr
>> Performance danken.
>>
>>
>> Grüße,
>> Dominik
>
> Hallo,
> mal so grundsätzlich gefragt ob man den Performanceunterschied zwischen
> ID='1' und ID=1 wirklich merkt. Ist MySQL nicht intelligent genug vor der
> Ausführung selber eine Konvertierung zu machen?
>
Unabhängig von der "Intelligenz": Irgendwann muss konvertiert werden.
Und eine Konvertierung kostet Zeit -> Performanceverlust. Im konkreten
Fall dürfte das kaum eine Rolle spielen, aber prinzipiell sollte man
sich schon angewöhnen, möglichst viel eigene Intelligenz aufzuwenden,
bevor man sich auf die eines Programms verlässt. Brain 1.0 ist MySQL
5.x vermutlich immer noch überlegen.
Übrigens verbessert es auch die Wartbarkeit eines Programms, wenn man
sofort erkennen kann, welche Datentypen irgendwo übergeben werden...
Re: SQL Problem mit MySQL 5
am 14.06.2006 11:12:25 von Sibylle Koczian
Christian Kirsch schrieb:
> Christian Schmelzer schrieb:
>=20
>>Dominik Echterbruch wrote:
>>
>>>
>>>Christian hat ja bereits den Zaunpfahl ausgepackt. Aber ganz nebenbei:=
>>>Eine Spalte vom Typ int erwartet ganze Zahlen, keine Strings. '1' ist
>>>aber ein String und keine Zahl (jedenfalls erzählst du das MySQL).
>>>Verwende eine einfache 1 ohne Anführungszeichen, wenn du eine
>>>einfache 1 haben möchtest. Die Datenbank wird es dir mit mehr
>>>Performance danken.
>>>
>=20
..
>=20
> Übrigens verbessert es auch die Wartbarkeit eines Programms, wenn man=
> sofort erkennen kann, welche Datentypen irgendwo übergeben werden...
Entsprechen automatische Konversionen zwischen übergebenen Parametern
und Datenbankfeldern eigentlich dem SQL-Standard? Oder muss der OP
sowieso damit rechnen, dass die Update-Abfrage bei einem Wechsel des
Datenbanksystems nicht mehr funktioniert?
Grüße,
Sibylle
--=20
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg
e-mail : Sibylle.Koczian@Bibliothek.Uni-Augsburg.DE
Re: SQL Problem mit MySQL 5
am 14.06.2006 11:15:20 von Axel Schwenke
"Christian Schmelzer" wrote:
> Dominik Echterbruch wrote:
>> Martin Haust wrote:
>>>
>>> Tabelle:
>>> Field Type Null Key Default Extra
>>> -------- ------------ ------- ------ ---------- --------
>>> ID int(11) NO
>>> Release varchar(100) YES (null)
>>>
>>> UPDATE tbltest SET `Release`='BLA' WHERE ID='1'
>>> UPDATE tbltest SET Release='BLA' WHERE ID='1'
>>
>> Christian hat ja bereits den Zaunpfahl ausgepackt. Aber ganz nebenbei:
>> Eine Spalte vom Typ int erwartet ganze Zahlen, keine Strings. '1' ist
>> aber ein String und keine Zahl (jedenfalls erzählst du das MySQL).
>> Verwende eine einfache 1 ohne Anführungszeichen, wenn du eine
>> einfache 1 haben möchtest. Die Datenbank wird es dir mit mehr
>> Performance danken.
>>
>>
>> Grüße,
>> Dominik
>
> Hallo,
> mal so grundsätzlich gefragt ob man den Performanceunterschied zwischen
> ID='1' und ID=1 wirklich merkt. Ist MySQL nicht intelligent genug vor der
> Ausführung selber eine Konvertierung zu machen?
>
> Christian
>
>
Re: SQL Problem mit MySQL 5
am 14.06.2006 11:27:48 von Christian Schmelzer
Sibylle Koczian wrote:
> Christian Kirsch schrieb:
>> Christian Schmelzer schrieb:
>>
>>> Dominik Echterbruch wrote:
>>>
>>>>
>>>> Christian hat ja bereits den Zaunpfahl ausgepackt. Aber ganz
>>>> nebenbei: Eine Spalte vom Typ int erwartet ganze Zahlen, keine
>>>> Strings. '1' ist aber ein String und keine Zahl (jedenfalls
>>>> erzählst du das MySQL). Verwende eine einfache 1 ohne
>>>> Anführungszeichen, wenn du eine einfache 1 haben möchtest. Die
>>>> Datenbank wird es dir mit mehr Performance danken.
>>>>
>>
> ...
>>
>> Übrigens verbessert es auch die Wartbarkeit eines Programms, wenn man
>> sofort erkennen kann, welche Datentypen irgendwo übergeben werden...
>
> Entsprechen automatische Konversionen zwischen übergebenen Parametern
> und Datenbankfeldern eigentlich dem SQL-Standard? Oder muss der OP
> sowieso damit rechnen, dass die Update-Abfrage bei einem Wechsel des
> Datenbanksystems nicht mehr funktioniert?
>
Hallo,
ok, ich weiß dass man die richtigen Typen nehmen sollte. Ist ja auch kein
Problem. War eher eine grundsätzliche Frage.
Und zum Wechsel des Systems, nun ich denke in der Praxis kommt das doch
extrem selten vor und dann wird es sicher nicht nur an der '1' scheitern.
Ich kann mir keinen problemlosen Wechsel vorstellen außer man verwendet
wirklich nur den allgemeinsten SQL Standard und nutzt nicht ein einziges
besonderes Feature einer DB. Es scheitert doch schon beim Nutzen des
beliebten LIMIT.
Christian
Re: SQL Problem mit MySQL 5
am 14.06.2006 12:34:01 von Axel Schwenke
Axel Schwenke wrote:
Nix. Mist, wollte ich nicht auf [Cancel] klicken?
> "Christian Schmelzer" wrote:
>> Dominik Echterbruch wrote:
>>> Eine Spalte vom Typ int erwartet ganze Zahlen, keine Strings. '1' ist
>>> aber ein String und keine Zahl (jedenfalls erzählst du das MySQL).
>>> Verwende eine einfache 1 ohne Anführungszeichen, wenn du eine
>>> einfache 1 haben möchtest. Die Datenbank wird es dir mit mehr
>>> Performance danken.
>> mal so grundsätzlich gefragt ob man den Performanceunterschied zwischen
>> ID='1' und ID=1 wirklich merkt. Ist MySQL nicht intelligent genug vor der
>> Ausführung selber eine Konvertierung zu machen?
MySQL macht diese Konvertierung schon immer. Und regelmäßig kommen
Leute und heulen, daß das nicht dem SQL-Standard entspricht.
Zum Thema Performance: zumindest frühere Versionen von MySQL haben
Indizes nicht verwendet, wenn der Typ falsch war. Ist aber glaube
ich schon lange gefixt.
XL