Seite 1 von 1

Leerzeichen in Default-Value verursacht Fehler

Verfasst: Samstag 9. Februar 2013, 17:51
von atarax
Ich möchte einer Tabelle eine Spalte mit dem Standardwert Hallo Welt (ohne Anführungszeichen) hinzufügen.

Code: Alles auswählen

ALTER TABLE 'mytable' ADD COLUMN 'newcolumn' TEXT DEFAULT Hallo
funktioniert, liefert aber nur Hallo als Standardwert.

Code: Alles auswählen

ALTER TABLE 'mytable' ADD COLUMN 'newcolumn' TEXT DEFAULT Hallo Welt
verursacht einen Syntaxfehler aufgrund des Leerzeichens

Code: Alles auswählen

ALTER TABLE 'mytable' ADD COLUMN 'newcolumn' TEXT DEFAULT 'Hallo Welt'
funktioniert, liefert aber 'Hallo Welt' als Standardwert (einschließlich einfacher Anführungszeichen).

Habe leider bisher keine Möglichkeit gefunden, das Leerzeichen zu escapen. Weiß jemand Rat? Vielen Dank!

Re: Leerzeichen in Default-Value verursacht Fehler

Verfasst: Samstag 9. Februar 2013, 18:02
von BlackJack
@atarax: Zeichenketten werden in SQL üblicherweise in Anführungszeichen eingefasst. Und die sind nicht Bestandteil des Wertes. Das ist also die vorgesehene Art Leerzeichen zu „escapen”.

Tabellen und Spaltennamen werden dagegen normalerweise *nicht* in Anführungszeichen gesetzt. Ich denke das wird auch nicht jedes DBMS so schlucken.

Re: Leerzeichen in Default-Value verursacht Fehler

Verfasst: Samstag 9. Februar 2013, 18:25
von Sirius3
@atarax: Welches Datenbanksystem benutzt Du?
Wie fragst Du den Standardwert ab?

SQlite macht es richtig, und ich glaube kaum, ein anderes Datenbanksystem verhält sich in diesem Punkt anders. Benutze auch bei vermeintlich konstanten Werten die Möglichkeit Variablen als Variablen anzugeben:

Code: Alles auswählen

cursor.execute('ALTER TABLE mytable ADD COLUMN newcolumn TEXT DEFAULT ?', ('Hallo Welt!',))
Das spart lästiges Nachdenken über Escape-Sequenzen.

Re: Leerzeichen in Default-Value verursacht Fehler

Verfasst: Sonntag 10. Februar 2013, 07:12
von atarax
Es geht hier um SQLite. Offenbar klappt es mit

Code: Alles auswählen

ALTER TABLE 'mytable' ADD COLUMN 'newcolumn' TEXT DEFAULT 'Hallo Welt'
doch. Ich hatte die neue Struktur der Datenbanktabelle mit

Code: Alles auswählen

PRAGMA table_info('mytable')
abgefragt und als Ergebnis

Code: Alles auswählen

(8, 'newcolumn', 'TEXT', 0, "'Hallo Welt'", 0)
erhalten, woraus ich geschlossen habe, dass die einfachen Anführungszeichen nun Teil des Standardwertes wären. Eine Abfrage mit

Code: Alles auswählen

SELECT * FROM 'mytable'
hat dies aber nicht bestätigt.

Vielen Dank.