2017-05-23 1 views
0

Meine MySQL DB verwendet für einen Primärschlüssel , aber es war erforderlich, diesen Datentyp zu CHAR(36) zu ändern. Wenn ich jedoch mit der Maus und unter Verwendung von Workbench ein 'Feld kopieren' an einer Zelle der neuen Spalte CHAR(36) anlege, erhalte ich die alte Zeichenfolge mit 18 Zeichen. Ich überprüfte die Erklärung dieser Spalte und es steht CHAR(36) PK. Stimmt irgendetwas nicht?Ändern der Spalte von CHAR (18) zu CHAR (36) IN MYSQL

Antwort

1

Haben Sie den Schlüssel nach dem Ändern des Säulentyps aktualisiert? Wenn dies nicht der Fall ist, konnten beim Erstellen der Zeile nur 16 Zeichen verarbeitet werden, so dass der Rest der Daten abgeschnitten wird.

Normalerweise erhalten Sie eine DataTruncation-Ezeption, wenn dies angezeigt wird, aber ofc. Wenn Sie diesen Typ von Ausnahme nicht behandelt haben, werden die Daten trotzdem eingefügt - nur abgeschnitten.

Sie können diese Informationen nicht wiederherstellen, es sei denn, Sie haben ein vollständiges Abfrageprotokoll aktiviert, mit dem Sie den Primärschlüssel aus den Protokollen neu erstellen können.

Zumindest ist es eine PK-Column (unique), also, wenn die Einfügung funktioniert hat, war auch der abgeschnittene Teil des Schlüssels einzigartig, was es erlaubt "manuell zu reparieren".

+0

Die Daten waren in einer Tabelle und ich erstellte zuerst das DB-Schema. Die ursprünglichen Daten für IDs hatten 18 Zeichen und es wurde so "eingefügt". Das "gerade erstellte" neue Schema deklarierte IDs als CHAR (36). –

+0

@JoseCabreraZuniga ist es wirklich 'CHAR()' was du benutzt oder 'VARCHAR()'? Beachten Sie, dass die Länge für 'VARCHAR' in Bytes angegeben ist, so dass ein' VARCHAR (36) 'zusammen mit einer Codierung, die 2 Bytes pro Zeichen erfordert, nur 18 Zeichen enthalten kann. – dognose

+0

Ich bin sicher, es ist CHAR –