2016-01-27 14 views
7

In mySQL Werkbank-Datenbank, einer der Tabellen hat Breite, Länge und KreisattributeFalsche decimal (integer) Wert: '' mySQL

lat: decimal (10,8)

lng: decimal (11 , 8)

Bezirk: int (4)

ich versuche, Daten aus CSV-Datei zu dieser Tabelle zu importieren

ERROR 1366: 1366: Incorrect decimal value: '' for column 'lat' at row 1 
SQL Statement: 
ERROR 1366: 1366: Incorrect integer value: '' for column 'district' at row 1 
SQL Statement: 
INSERT INTO `db`.`myTable` (`id`, `name_en`, `icon`, `lat`, `lng`, `district`, `city`, `postal_code`) 
    VALUES ('686', 'Name',?, '', '', '','1', 'P.O. Box 1111') 
+0

ich lieber mit 'varchar' Typ' sensitive' Fehler zu vermeiden. –

Antwort

12

Sie haben strikt SQL-Modus aktiviert, und Sie versuchen, eine leere Zeichenfolge ('') als Wert für Dezimalfelder in der Einfügung übergeben. Leere Zeichenfolge ist ein ungültiger Wert für ein numerisches Feld und in generiert mysql einen Fehler, wenn Sie versuchen, eine ungültige Daten in eine Spalte einzufügen, anstatt eine Warnung und verwenden den Standardwert (0 für numerische Spalten) der bestimmten Spalte Daten Typ:

Der Strict-Modus steuert, wie MySQL ungültige oder fehlende Werte in Datenänderungsanweisungen wie INSERT oder UPDATE behandelt. Ein Wert kann aus verschiedenen Gründen ungültig sein. Zum Beispiel könnte es die falschen Daten Typ für die Spalte haben, oder es könnte außerhalb des Bereichs sein. Ein Wert fehlt , wenn eine neue einzufügende Zeile keinen Wert für eine Nicht-NULL-Spalte enthält, die in ihrer Definition keine explizite DEFAULT-Klausel enthält. (Für eine NULL-Spalte wird NULL eingefügt, wenn der Wert fehlt.) Der strikte Modus wirkt sich auch auf DDL-Anweisungen wie CREATE TABLE aus.

Wenn Strict-Modus nicht aktiviert ist, MySQL eingestellten Werte für ungültige oder fehlende Werte einfügt und erzeugt Warnungen (Abschnitt 13.7.5.40, „SHOW WARNINGS Syntax“ sehen). Im strikten Modus können Sie dieses Verhalten mit INSERT IGNORE oder UPDATE IGNORE erzeugen.

Entfernen Sie den strikten SQL-Modus für die Sitzung vor dem Import beginnen:

SET SESSION sql_mode = '' 
+0

Vielen Dank, es hat funktioniert! :) – Maha

+0

Es ist erwähnenswert, dass, wenn Sie dies global einstellen möchten, können Sie Folgendes tun: 'SET GLOBAL sql_mode = ''' – aldefouw

+1

@aldefouw das ist nicht so eine gute Idee. – Shadow