it-swarm.com.de

MySQL zu lange Varchar-Kürzung / Fehler-Einstellung

Ich habe zwei MySQL-Instanzen. Die erste Option schneidet Zeichenfolgen beim Einfügen ab, wenn die Daten zu lang sind. Die zweite wirft einen Fehler auf:

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

Ich möchte, dass der 2. auch die Daten abschneidet. Gibt es eine MySQL-Einstellung, um dieses Verhalten zu verwalten?

32
Maksym Polshcha

Sie können STRICT_TRANS_TABLES Und STRICT_ALL_TABLES Deaktivieren. Dies ermöglicht das automatische Abschneiden der eingefügten Zeichenfolge.

Zitat aus der MySQL-Dokumentation.

Der strikte Modus steuert, wie MySQL mit ungültigen oder fehlenden Werten in Datenänderungsanweisungen wie INSERT oder UPDATE umgeht. Ein Wert kann aus mehreren Gründen ungültig sein. Es hat beispielsweise möglicherweise den falschen Datentyp für die Spalte oder liegt außerhalb des gültigen Bereichs. Ein Wert fehlt, wenn eine neue einzufügende Zeile keinen Wert für eine Nicht-NULL-Spalte enthält, deren Definition keine explizite DEFAULT-Klausel enthält. (Bei einer NULL-Spalte wird NULL eingefügt, wenn der Wert fehlt.)

Referenz: MySQL Server SQL Modes

42
bansi

Wenn der strikte SQL-Modus nicht aktiviert ist und Sie einer CHAR- oder VARCHAR-Spalte einen Wert zuweisen, der die maximale Länge der Spalte überschreitet, wird der Wert passend abgeschnitten und eine Warnung generiert. Beim Abschneiden von Nicht-Leerzeichen können Sie einen Fehler (statt einer Warnung) verursachen und das Einfügen des Werts unterdrücken, indem Sie den strengen SQL-Modus verwenden. Siehe auch Abschnitt 6.1.7, „Server-SQL-Modi“.

So können Sie es ändern: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


Es wurden zwei Möglichkeiten gefunden, den strengen Modus zu deaktivieren:

  1. füge unten my.cnf hinzu

    sql-mode = "NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"

  2. weg ist die Verwendung von MySQL-Konsole.

    SET @@ global.sql_mode = '';

Bitte testen Sie sie, bevor Sie sie in einer Produktionsumgebung ausführen.

wenn Sie cpanel verwenden,

ersetzen

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

in /usr/my.cnf

zu

sql-mode=""

lauf

/etc/init.d/mysql restart
1
Mikel Tawfik