it-swarm.com.de

Fehlercode: 1406. Daten zu lang für Spalte - MySQL

Fehlercode: 1406. Daten für Spalte zu lang 

CREATE  TABLE `TEST` 
(

  `idTEST` INT NOT NULL ,

  `TESTcol` VARCHAR(45) NULL ,

  PRIMARY KEY (`idTEST`) 
);

Nun Insert einige Werte

INSERT INTO TEST
VALUES
(
    1,
    'Vikas'
)

select 

SELECT * FROM TEST;

Datensatz mehr als das length einfügen

INSERT INTO TEST
VALUES
(
    2,
    'Vikas Kumar Gupta Kratika Shukla Kritika Shukla'
)

Wenn wir select die length 

SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')

 '47'

Und es wird die Fehlermeldung angezeigt 

Fehlercode: 1406. Daten zu lang für Spalte  

Aber was ich erwarte ist, ich möchte mindestens die ersten 45 Zeichen in die Tabelle einfügen

bitte lassen Sie mich wissen, wenn die Frage nicht klar ist.

Ich kenne die Ursache dieses Fehlers. Ich versuche, Werte über die Länge des Datentyps einzufügen.

Ich möchte eine Lösung in MySQL, da es in MS SQL möglich ist. Ich hoffe also, dass es auch in MySQL wäre.

14
vikas

MySQL schneidet jeden Einfügewert ab, der die angegebene Spaltenbreite überschreitet.

um dies ohne Fehler zu machen, wechseln Sie Ihren SQL mode, um STRICT nicht zu verwenden.

MySQL-Referenzhandbuch


BEARBEITEN:

Um den Modus zu ändern 

Dies kann auf zwei Arten erfolgen:

  1. Öffnen Sie Ihre my.ini (Windows) oder my.cnf (Unix) Datei im MySQL-Installationsverzeichnis und suchen Sie nach dem Text "sql-mode".

Finden:

Code:

# Set the SQL mode to strict 
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Ersetzen mit:

Code:

# Set the SQL mode to strict 
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Oder

  1. Sie können eine SQL-Abfrage in Ihrem Datenbankverwaltungstool ausführen, z. B. phpMyAdmin:

Code:

SET @@global.sql_mode= '';
55
echo_Me

Ich denke, dass das Ausschalten des STRICT-Modus keine gute Option ist, da die App die von Benutzern eingegebenen Daten verlieren kann.

Wenn Sie Werte für das TESTcol von einer App erhalten, können Sie eine Modellvalidierung hinzufügen, wie in Rails

validates :TESTcol, length: { maximum: 45 }

Wenn Sie mit Werten in einem SQL-Skript manipulieren, können Sie die Zeichenfolge mit dem Befehl SUBSTRING abschneiden

INSERT INTO TEST
VALUES
(
    1,
    SUBSTRING('Vikas Kumar Gupta Kratika Shukla Kritika Shukla', 0, 45)
);
1
Hirurg103

Dies ist ein Schritt, den ich mit Ubuntu benutze. Damit können Sie mehr als 45 Zeichen aus Ihrer Eingabe einfügen, aber MySQL schneidet Ihren Text auf 45 Zeichen ab, um ihn in die Datenbank einzufügen.

  1. Führen Sie den Befehl aus

    Sudo nano /etc/mysql/my.cnf

  2. Dann fügen Sie diesen Code ein

    [mysqld] sql-mode = "NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"

  3. starten Sie MySQL neu

    Sudo service mysql restart;

0
Joe