2016-06-28 8 views
11

Ich habe meine Datenbank mit JSON-Spalten darin exportiert. Nachdem ich auf einen neuen Server migriert, stürzte mein Import jedes Mal mit einem Fehler wie:MySQL 5.7.12 Import kann keinen JSON-Wert aus einer Zeichenkette mit CHARACTER SET 'binary' erzeugen

kann einen JSON-Wert aus einem String mit CHARACTER SET Binärdienst

auf Stackoverflow nicht schaffen, fand ich diese Post aber funktionierte nicht für mich: mysqlimport issues "set @@character_set_database=binary" which prevents loading json values

Die Datei ist 2 GB und es ist nicht möglich, die Datei zu öffnen.

Jeder hat eine Idee, meine Datenbankdatei zu importieren?

Antwort

2

Alle Informationen zum MySQL JSON-Datentyp müssen UTF8MB4-Zeichensatz und nicht BINARY sein.

+2

Gibt es eine Möglichkeit, dies mit einem Strom zu zwingen SQL-Dump, um dieses Ding zu reparieren? –

+0

Wie konvertiert man es in UTF8MB4? Ich erhalte einen Fehler, wenn ich 'ALTER TABLE table_name verwende CHANGE col_name col_name JSON CHARACTER SET utf8mb4;' – burakcalik

+1

Nicht sicher, dass er eine Antwort ist, eher wie eine Aussage. Wie wird dieses Problem importiert? – Ray

40

Sie können eine Regex auf den von Ihnen exportierten SQL-Text anwenden, der Ihre Binärzeichenfolgen in ein einfügbares Format konvertiert. Das war mein quick and dirty fix, wenn ich dieses Problem konfrontiert

(X'[^,\)]*') 
CONVERT($1 using utf8mb4) 

diese regex Anwendung bedeutet

INSERT INTO json_table (json_column) VALUES (X'7B22666F6F223A2022626172227D'); 

jetzt

INSERT INTO json_table (json_column) VALUES (CONVERT(X'7B22666F6F223A2022626172227D' using utf8mb4)); 
+0

Das hat mich gerettet, danke! –

+0

Das hat mich auch gerettet! danke: D – gpopoteur

+4

Das sollte die richtige Antwort sein. – rootr

3

Das funktionierte für mich werden wird, (ich hatte die Kontrolle über der Export in die SQL-Datei auch). Es gibt viele Vorbehalte; z.B. Ich wusste, dass die Felder niemals größer als 1000 sein würden und keine Nicht-Ascii-Zeichen enthalten würden. Bitte Kommentar und sagen Sie mir alle whys dies so schlecht tho ist :)

vor dem Export

alter table <table> modify <json_column> varchar(1000); 

Dann nach dem Import

alter table <table> modify <json_column> json;