Welches Feld ist hier gemeint
Eingetragen von AndyLicht (260)
am 19.02.2014 - 07:57 Uhr in
am 19.02.2014 - 07:57 Uhr in
Hallo Forum,
ich habe hier eine Fehlermeldung die sich mir nicht gänzlich erklärt.
PDOException: SQLSTATE[22001]: String data, right truncated: 7 FEHLER: Wert zu lang für Typ character varying(255): INSERT INTO node (type, language, title, uid, status, created, changed, comment, promote, sticky) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9); Array ( ) in drupal_write_record() (line 7194 of C:\xampp\htdocs\drupal\includes\common.inc)
Ich importiere aus einer externen Quelle Daten und generiere mir Nodes, der Fehler ist an und für sich nichts neues. Ich kenne meine "neuen" Daten nicht (keine Angst, bei den Daten handelt es sich um um interne Daten, aber um Drupal extern*G*) und daher musste ich anfänglich die max. Length einiger Felder doch erhöhen. Doch hier erkenne ich nicht um welches Feld es sich handelt.
Kann ich die max Length eines Feldes beim generieren eines Nodes abfragen, dann könnte ich bei zulangen Imports diese einfach abschneiden???
mit bestem Gruß
Andy
- Anmelden oder Registrieren um Kommentare zu schreiben
womit lädst du die Daten?
am 19.02.2014 - 08:37 Uhr
Welches Modul nutzt du dazu?
Wenn du feeds nutzt, kannst du mit feeds_tamper Felder untersuchen und manipulieren.
Für Datenimporte würde ich immer feeds nehmen.
Grüße
Ronald
Hi, ich habe mein eigenes
am 19.02.2014 - 08:41 Uhr
Hi,
ich habe mein eigenes Modul geschrieben, anders geht es leider nicht. Ich importiere XML-Dokumente und muss diese vorher parsen. Eventuell liegt es aber auch an einem Warning, welches ausgegeben wird (XML-Fehler), wobei das eher unrealistisch ist.
Aller Anfang ist schwer...
Die Fehlermeldung bezieht
am 19.02.2014 - 10:05 Uhr
Die Fehlermeldung bezieht sich auf die Node-Tabelle. Dort gibt es aber nur ein Feld vom Typ varchar(255), nämlich den Titel. Also wird der Fehler von einem zu Lagen Titel herrühren.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Wenn du die Daten selbst importierst,
am 19.02.2014 - 10:36 Uhr
musst du sie auch selbst auf Konsistenz prüfen.
Hier ist also deine Importroutine gefragt, die dafür sorgen muss, dass Datenbankgrenzen nicht überschritten werden.
Du kannst sicher einiges erreichen, indem du bestimmte codes ausfilterst.
Z.B. sind in der Titelzeile keine HTML-Codes erlaubt. Wenn du diese gleich wegwirfst, ist die Feldlänge schon erheblich weniger.
Die Begrenzungen musst am Ende du selbst festlegen.
Ob eine Titelzeile von 255 Zeichen noch irgendwie sinnvoll sein kann, ist eine Entscheidung, die nur du treffen kannst.
Du könntest natürlich, wenn diese Zeile sehr wichtig ist, den Titel stark kürzen, und im Body mit einem Tag wiederholen, dass dort der Titel komplett steht.
Da du dir schon die Mühe für ein eigenes Modul gemacht hast, ist es natürlich müsig, auf feeds und seine Verwandten zu verweisen ;-)
Grüße
Ronald
Hi, ja das Problem war aus
am 19.02.2014 - 10:49 Uhr
Hi,
ja das Problem war aus meiner Sicht das feeds kein XML-Import kann. Das mit dem Überprüfen der zu importierenden Daten wäre schön, nur wie kriege ich während der Laufzeit die max_length eines Feldes ausgegeben? Ich möchte nur ungern, diese Werte alle händisch eintippen (muss ja dann auch alles im Code geändert werden, wenn sich was ändert).
mfg
Andy
Aller Anfang ist schwer...
da muss wohl die DB abgefragt werden
am 19.02.2014 - 11:10 Uhr
Ob die Drupal-API hier etwas bietet, weiß ich gerade nicht.
Aber selbstverständlich kann man die Datenbank nach der Definition der Tabelle fragen (mySQL-Handbuch).
Nichtsdestotrotz ist 255 eh' die physische Begrenzung für ein Feld vom Typ String.
Größere Datenmengen müssen in einem BLOB/TEXT gespeichert werden.
Deshalb findest du diesen Feldtyp relativ häufig in den Drupaltabellen.
Übrigens kann feed XML, ich habe es selbst jedoch auch noch nicht ausprobiert.
Ich denke auch, dass du schon so viel Hirnschmalz im eigenen Modul stecken hast, dass ein Umstieg wohl nicht mehr sinnvoll ist.
Da das eigene Modul immer auch sehr viel spezifischer ist, wird es auch schneller laufen.
Du wirst um eine Prüfung der Daten jedoch nicht herum kommen.
Grüße
Ronald
Hi,vielen Dank für deine
am 19.02.2014 - 11:33 Uhr
Hi,
vielen Dank für deine ausführlichen Antworten. Das mit den 255Zeichen erschließt sich mir noch nicht ganz. Ich kann einem Feld doch zuweisen, dass es 50000 Zeichen haben soll, in Postgres wird dieses weiterhin als "character varying" gespeichert und damit im gleichen Format wie Titel. Drupal scheint das nichts auszumachen, als "blob-Ersatz" würde bytea gehen, aber Drupal nutzt das definitiv nicht bei Textfeldern.
mit bestem Gruß
EDIT: Ich sehe schon, bei der Auswahl von long Text wird der Spaß dann als Text gespeichert in Postgres, dann werde ich das auf jeden Fall auch noch einmal umstellen. An was ich alles denken darf*G*
Aller Anfang ist schwer...