it-swarm.com.de

Ungültiges Datums-/Uhrzeitformat: 1366 Falscher Zeichenfolgewert

Ich erhalte diesen Fehler:

SQLSTATE [22007]: Ungültiges Datums-/Uhrzeitformat: 1366 Falscher Zeichenfolgewert: '\ xBD Inch ...' für Spalte 'Spaltenname' in Zeile 1

Meine Datenbank, Tabelle und Spalte haben das Format utf8mb4_unicode_ci Auch der Name der Spalte ist der Typ text und NULL.

Dies ist der Wert des Spaltennamens

[Spaltenname] => Text vor 11 und anderer Text nach und nach.

Ich warte jedoch, dass Laravel den Werten der Spalte Anführungszeichen hinzufügt, da die Werte durch Kommas (,) getrennt werden. Es sollte wie folgt sein:

[column-name] => 'Einige Texte vor 11 und andere nach und nach.'

Siehe unten das Schema

    Schema::create('mws_orders', function (Blueprint $table) {
        $table->string('custom-id');
        $table->string('name');
        $table->string('description')->nullable();
        $table->string('comment')->nullable();
        $table->integer('count')->nullable();
        $table->text('column-name')->nullable();
        $table->timestamps();

        $table->primary('custom-id');
    });

Ich habe auf Google gesucht, aber noch keine Lösung gefunden.

Hat jemand eine Idee, wie man dieses Problem lösen kann?

Ich verwende Laravel 5.5 und MariaDB 10.2.11.

5
omixam

Ich habe es gelöst, indem ich alle String-Spalten in uft-8 codiere, die diesen Fehler vor dem Einfügen erzeugt haben. Die Spalte, die den Fehler generiert hat, war beispielsweise Spaltenname und wurde als Show unten codiert. Ich habe auch eine andere Spalte mit dem gleichen Fehler gefunden, ich habe auch diese Lösung verwendet.

$data [
//key=>values 
];

$myModel = new MyModel(); 

$data['column-name'] = DB::connection()->getPdo()->quote(utf8_encode($data['column-name']));

$myModel->insert($data); 
8
omixam

Ich hatte ähnliche Probleme mit Laravel 5.5 und MariaDB 10.2. Beim Speichern einiger Benutzereingaben t in einer varchar-Spalte gilt eine Ausnahme:

SQLSTATE [22007]: Ungültiges Datums- und Uhrzeitformat: 1366 Falscher Zeichenfolgenwert: '\ xE2\x80\x86y\xE2\x80 ...' für Spalte 'Kommentar' in Zeile 1

wird geworfen.

Da dies nur auf dem Bühnenserver und nicht auf dem lokalen dev-Server der Fall war, habe ich die Sortierreihenfolge und den Zeichensatz der Unterstreichungstabelle verglichen. Es stellt sich heraus, dass Datenbank und Tabelle auf dem Stadiumserver lartin1 verwenden, während der lokale dev-Server utf8mb64 verwendet.

Das Problem wurde durch Ändern der Datenbank- und Tabellensortierung und des Zeichensatzes auf utf8mb64 und utf864mb_unicode_ci gelöst.

ALTER DATABASE <db_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Für alle, die mit diesem Problem konfrontiert sind, überprüfen Sie bitte die Sortierung und den Zeichensatz Ihrer Datenbank und Tabelle. Die Chancen stehen gut Laravel App codiert mit utf8, während Datenbanken etwas anderes verwenden.

2
Zhiyong Li

BD ist das latin1 (und mehrere andere), das für ½ (eine Hälfte) codiert. Die Fehlermeldung beschreibt das Speichern in einer Datumszeit. Es klingt also so, als gäbe es mindestens zwei Fehler -

  • nichtübereinstimmung von CHARACTER SETs
  • schlecht formulierte Abfrage

Sie zeigen uns etwas über den CREATE TABLE, aber warum sollte "Zoll" daran beteiligt sein?

1
Rick James