2016-08-04 63 views
1

Ich versuche, ein Problem mit einer Update-Anweisung zu debuggen. Es schlägt in unserer Java-App in unserer Entwicklungsumgebung fehl, ist aber in lokalen Umgebungen erfolgreich. Wenn es von Hand ausgeführt wird, läuft es ordnungsgemäß in den lokalen Umgebungen, aber nicht im Dev. Die Tabellendefinition ist in beiden Umgebungen identisch, mit Ausnahme des aktuellen Werts von auto_increment.MySQL Varchar Daten abgeschnitten für Spalte name_last in Zeile 1

Der Fehler ist:

Error Code: 1265. Data truncated for column 'name_last' at row 1 0.062 sec 

ist die Abfrage:

update party set 
master_id = 0, 
name_last = 'aaa', 
name_first = 'bbb333333333333333333333333333333333333333333333333333444444', 
name_middle = 'ccc555555555555555555555555555555555555555555556666666666666', 
name_suf = null, 
business_name = null, 
business= 0, 
alias_of_id= null, 
is_alias= 0, 
updated_user = 3, 
active = 1 
where 
party_id = 20986 

Hier ist die Tabellendefinition

CREATE TABLE `party` (
    `party_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `master_id` int(10) unsigned DEFAULT NULL, 
    `name_first` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `name_last` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `name_middle` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `name_suf` varchar(45) COLLATE utf8_unicode_ci DEFAULT '', 
    `business_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT '', 
    `is_alias` bit(1) DEFAULT b'0', 
    `alias_of_id` int(10) unsigned DEFAULT NULL, 
    `business` bit(1) NOT NULL DEFAULT b'0', 
    `active` bit(1) NOT NULL DEFAULT b'1', 
    `updated_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `created_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `updated_user` int(10) unsigned NOT NULL, 
    `created_user` int(10) unsigned NOT NULL, 
    `name_pre` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`party_id`), 
    KEY `IX_Party_Name` (`name_first`,`name_last`,`name_middle`) 
) ENGINE=InnoDB AUTO_INCREMENT=20988 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

SELECT @@ VERSION, @@ SQL_MODE; '. Vergleichen. –

+0

Überprüfen Sie auch auf Trigger. Die Abfrage hat keinen offensichtlichen Fehler, daher könnte ein Trigger dies auslösen. –

+0

Michael, Danke dafür. Wir haben einen Auslöser, der von der Party-Tabelle in eine party_history-Tabelle kopiert. Die Spalten in der Tabelle party_history sind nur varchar (45), so dass dies eine Quelle für das Problem zu sein scheint. Es ist verwirrend, dass es in der lokalen Umgebung erfolgreich ist, die das gleiche Tabellendefinitionsproblem für die Verlaufstabelle hat. –

Antwort

0

Daten abschnitten tritt auf, wenn die Feldgröße als der kleinere ist Datenwert würde eingefügt werden: zum Beispiel

Ihr Feld "NAME_LAST varchar (10)", dann fügen Sie einen Wert von mehr als 10 Zeichen Fehler Rückgabedaten abgeschnitten .:

sehen Sie diesen Link unten für weitere Informationen:

https://en.wikipedia.org/wiki/Data_truncation

+0

Ich stimme zu. Wie Sie jedoch an der oben aufgelisteten Anweisung sehen können, die fehlgeschlagen ist, ist der Wert, den ich in der Spalte name_last speichern möchte, nur 3 Zeichen lang. Die Spalte hat eine Größe von 60 Zeichen. Diese Situation scheint also nicht zu gelten. –