Laravel: Stringdaten, rechts abgeschnitten: 1406 Daten zu lang für Spalte
Lesezeit: 5 Minuten
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
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
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
Ä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();
Pramodya Abeysinghe
Ändern Sie den Typ der Spalte vonstring zu text.
Führen Sie dann eine Migrationsaktualisierung mit aus php artisan migrate:refesh
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
11749300cookie-checkLaravel: Stringdaten, rechts abgeschnitten: 1406 Daten zu lang für Spalteyes
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