Laravel: Stringdaten, rechts abgeschnitten: 1406 Daten zu lang für Spalte

Lesezeit: 5 Minuten

Benutzer-Avatar
Sergej Fomin

Ich habe eine Tabelle mit einer Spalte “Hotel”. Das Projekt wird in Laravel 5.4 erstellt, daher habe ich Migrationen verwendet.

$table->string('hotel', 50);

Dies ist MYSQL-VARCHAR (50). Es hat gut funktioniert, denn als ich entwickelt habe, habe ich kurze Hotelnamen wie verwendet “HILTON NEW YORK 5“*.

Jetzt ist das Projekt in Produktion und der Kunde hat gefragt, warum er keine langen Hotelnamen eingeben kann. Ich habe es mit so einem nachgemachten Hotelnamen wie getestet „Lang lang lang lang lang lang lang lang lang und sehr sehr sehr langer Hotelname 5 Sterne“

Es gab mir einen Fehler:

“SQLSTATE[22001]: Stringdaten, rechts abgeschnitten: 1406 Daten zu lang für Spalte ‘Hotel’ in Zeile 1”

Ich habe die Datenbank in meinem Sequel Pro geöffnet und geändert

  • zuerst zu VARCHAR (255)
  • dann zu TEXT

Nach jeder Änderung habe ich es mit dem gleichen “Long long long long long long long long long and very-sehr-sehr langer Hotelname 5 beginnt” getestet und bekomme den gleichen Fehler (siehe oben).

Ich habe den Spaltentyp mit überprüft

SHOW FIELDS FROM table_name

und es hat mir gegeben

Feld | Typ

hotel | Text

der Feldtyp ist also tatsächlich „Text“ (65 535 Zeichen).

Vielleicht hängt es irgendwie mit der Laravel-Migrationsdatei (siehe oben) zusammen, in der ich am Anfang VARCHAR (50) gesetzt habe? Aber ich kann die Migration in der Produktion nicht erneut ausführen, da die Tabelle jetzt Daten enthält.

Würde mich über jede Hilfe freuen.


AKTUALISIEREN:
Ich entdeckte, dass es tatsächlich diesen langen Hotelnamen in der DB speichert. Aber der Benutzer bekommt immer noch diesen ärgerlichen Fehler jedes Mal, nachdem er das Formular abgeschickt hat …

  • Sie können sicherlich eine Migration erstellen, um den Feldtyp zu ändern. Solange es etwas ähnliches ist, sollte es kein Problem sein.

    – Matthew Daly

    27. Januar 2018 um 16:29 Uhr

  • Probieren Sie es wie immer auf Ihrer lokalen Kopie aus nur für den Fallaber ich verstehe nicht, warum es nicht funktionieren sollte.

    – Matthew Daly

    27. Januar 2018 um 16:30 Uhr

  • Hallo Leute. Vielen Dank. Ich habe eine neue Migration erstellt, wie Alexey in seiner Antwort unten erklärt, und sie ausgeführt (lokal), aber der Fehler wird immer noch jedes Mal angezeigt, wenn das Formular gesendet wird …: (

    – Sergej Fomin

    27. Januar 2018 um 17:01 Uhr

Benutzer-Avatar
Alexey Mezenin

Sie müssen eine neue Migration erstellen und bei registrieren composer du befehlen und ausführen php artisan migrate Befehl zum Ändern des Spaltentyps:

Schema::table('the_table_name', function (Blueprint $table) {
    $table->string('hotel', 255)->change();
});

  • Hallo, Alexej. Wie kann ich eine Migration auf dem Server durchführen, ohne alle eingegebenen Daten zu verlieren?

    – Sergej Fomin

    27. Januar 2018 um 16:29 Uhr

  • Dafür gibt es Migrationen. Wenn Sie eine neue Migration hinzufügen, nur um den Spaltentyp zu ändern und auszuführen php artisan migrate Befehl, gehen keine Daten verloren. Aber es sieht so aus, als wären Sie neu in diesem Bereich, daher würde ich Ihnen wirklich empfehlen, zuerst auf dem lokalen Computer zu üben und die Daten zu sichern.

    – Alexey Mezenin

    27. Januar 2018 um 16:30 Uhr


  • 1) sollte ich etwas zu ” public function down(){ } in der Migrationsdatei schreiben? 2) versuchte, eine Migration auszuführen, und bekam einen Fehler “Das Ändern von Spalten für die Tabelle “Touren” erfordert Doctrine DBAL; installiere “doctrine/dbal”. werde es installieren und auf dem lokalen Server ausführen.

    – Sergej Fomin

    27. Januar 2018 um 16:40 Uhr

  • Ja, Sie müssen das Paket installieren. Außerdem sollten Sie die Spalte in ändern up() Methode und in down() Sie müssen es wieder in den Zustand zurückversetzen, in dem es sich jetzt befindet. Das down() -Methode wird ausgeführt, wenn Sie die ausführen php artisan migrate:rollback Befehl.

    – Alexey Mezenin

    27. Januar 2018 um 16:42 Uhr


  • Ihre Antwort hat funktioniert, danke. Es war eine andere Tabelle mit dem Namen “vorherige_Touren”, in der das Feld “Hotel” ebenfalls auf die gleiche Weise neu angeordnet werden sollte.

    – Sergej Fomin

    29. Januar 2018 um 8:31 Uhr

Benutzer-Avatar
JDK Ben

Versuchen Sie in Ihrer lokalen Entwicklung, den Spaltentyp zu ändern in:

$table->longText('columnName')

aus Ihrer Migrationsdatei. Das hat es für mich gelöst. Aber wenn Sie live gegangen sind, erstellen Sie eine neue Migration, wie Alexey es vorgeschlagen hat, und verwenden Sie sie dann longText() Spaltentyp.

  • $table->text(‘columnName’) sollte für die meisten Fälle ausreichen

    – Hassan ALAMI

    18. August 2018 um 12:48 Uhr

  • longText() enthält viel Daten als text(). Er weiß also, dass er eine sehr große Textmenge verarbeiten wird, longText() wird die Arbeit erledigen.

    – JDK Ben

    21. August 2018 um 5:41 Uhr

  • Langer Text kann bis zu 4 GB Text enthalten. Ein Hotelname wird definitiv nie so lang sein. text() wird hier in Ordnung sein. Und wenn nicht, sollten Sie zu mediumText() stoßen, bevor Sie zu longText() gehen.

    – Nick

    10. September 2021 um 15:43 Uhr

Ich habe Bilder als base64 in einer Textspalte gespeichert, daher habe ich einen SQL-Fehler erhalten:

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'picture' at row 1 

Ich habe meine Migration als

$table->text('picture')

dann habe ich das Spaltenbild wie folgt geändert:

$table->mediumText('picture')

Ich habe festgestellt, dass in der Textspalte nur 64 KB gespeichert werden können

TEXT: 65.535 Zeichen – 64 KB MITTELTEXT: 16.777.215 – 16 MB LANGTEXT: 4.294.967.295 Zeichen – 4 GB

Weitere Informationen finden Sie unter: Verständnis-Speichergrößen-für-Mysql-Text-Datentypen

  • $table->text('picture') mein Problem gelöst

    – Mohammed Raza

    23. Januar 2021 um 13:29 Uhr

Ändern Sie den Datentyp der Spalte von Zeichenfolge in Text und geben Sie keine Länge an.

Ändern Sie den Datentyp der Spalte von Zeichenfolge in Text und geben Sie keine Länge an.

$table->text('hotel')->change();

Benutzer-Avatar
Pramodya Abeysinghe

Ändern Sie den Typ der Spalte vonstring zu text.

Führen Sie dann eine Migrationsaktualisierung mit aus php artisan migrate:refesh

Benutzer-Avatar
Nitish Nain

Lösung dieses Fehlers
"SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'hotel' at row 1"
Öffnen Sie Mysql und klicken Sie auf die Schaltfläche „Ändern“ in der Mitte dieser Spalte und machen Sie Länge/Werte = 111

1174930cookie-checkLaravel: Stringdaten, rechts abgeschnitten: 1406 Daten zu lang für Spalte

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy