Leerzeichen in Default-Value verursacht Fehler

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
atarax
User
Beiträge: 44
Registriert: Samstag 14. Juni 2008, 22:49
Wohnort: Berlin
Kontaktdaten:

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!
http://www.decocode.de/
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.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
atarax
User
Beiträge: 44
Registriert: Samstag 14. Juni 2008, 22:49
Wohnort: Berlin
Kontaktdaten:

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.
http://www.decocode.de/
Antworten