it-swarm.com.de

Der Import von MySQL 5.7.12 kann keinen JSON-Wert aus einer Zeichenfolge mit CHARACTER SET 'binary' erstellen.

Ich habe meine Datenbank mit JSON-Spalten exportiert. Nach der Migration zu einem neuen Server stürzte mein Import jedes Mal mit dem folgenden Fehler ab:

kann keinen JSON-Wert aus einer Zeichenfolge mit CHARACTER SET 'binary' erstellen

Auf stackoverflow fand ich diesen Beitrag, der für mich nicht funktionierte: mysqlimport Probleme "set @@ character_set_database = binary", wodurch das Laden von json values ​​

Die Datei ist 2 GB groß und kann nicht geöffnet werden.

Hat jemand eine Idee, meine Datenbankdatei zu importieren?

29
Danny Bevers

Alle MySQL-JSON-Datentypinformationen müssen UTF8MB4-Zeichensätze und nicht BINÄR sein.

0
David Stokes

Sie können einen Regex auf den von Ihnen exportierten SQL-Text anwenden, der Ihre binären Zeichenfolgen in ein einfügbares Format konvertiert. Dies war meine schnelle und schmutzige Lösung, als ich dieses Problem sah

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

Die Anwendung dieses Regex bedeutet

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

wird jetzt werden

INSERT INTO json_table (json_column) VALUES (CONVERT(X'7B22666F6F223A2022626172227D' using utf8mb4));
85
Lorcan O'Neill

Ich hatte dieses Problem mit Exporten von Sequel Pro. Ich habe die Output BLOB fields as hex-Option deaktiviert und das Problem ist verschwunden. Die visuelle Überprüfung des Exports zeigte lesbare JSON-Werte anstelle von binären.

55
Henry

Dies funktionierte für mich (ich hatte auch die Kontrolle über den Export in die SQL-Datei). 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.

Vor dem Export

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

Dann nach dem Import

alter table <table> modify <json_column> json;
4
Lnr

Ich habe heute dieselbe Frage gestellt. Unten waren die Ergebnisse für meinen Fall,

Ich bat einen meiner Freunde, einen SQL-Dump zu generieren, den ich importieren konnte. Er verwendete sequel-pro, um den Dump (Exportdatenbank) zu generieren. Beim Import warf ich einen Fehler 

Cannot create a JSON value from a string with CHARACTER SET 'binary'

Es gab also ein Problem mit dem generierten Dump. Alle json -Felder wurden in ein unformatiertes Format konvertiert, d. H.

"{'key1':'value1', 'key2':'value2'}"

es war,

X'nfdsklsdsklnfjkbvkjsdbvkjhdfsbvkjdsbnvljkdsbvkjhdfbvkjdfbvjkdfb'

Beim Importieren des Dumps, d. H. Beim Ausführen der insert -Anweisungen mysql, konnten die Daten nicht verarbeitet werden, da sie nicht vom Typ json waren .

Hier ist ein Link zu dem gemeldeten Bug
https://github.com/sequelpro/sequelpro/issues/2397

Sie müssen deaktivieren die Output BLOB fields as hex-Option.

2
swayamraina

Ich hatte dieses Problem mit einer Müllkippe. Ich konnte das Problem beheben, indem ich die Zeile in der Dump-Datei von

/*!40101 SET NAMES binary*/;

zu

/*!40101 SET NAMES utf8mb4*/;
0
Andrew Burns

vim version Für Lorcan O'Neills Antwort

vi xxxx.sql
:%s/\(X'[^,\)]*'\)/CONVERT(\1 using utf8mb4)/g
0
Kyogo Mochida

Dieses seltsame Problem trat beim Ausführen einer einfachen UPDATE-Abfrage auf:

update some_table set json_attr = '{"test":168}' where id = 123456;

Ein Neustart von MySQL hat das Problem behoben. Konnte die Ursache nicht lokalisieren.

Bearbeiten: Wir verwenden Aurora. Es sieht so aus, als hätten wir eine seltsame Konfiguration, bei der dieselbe Instanz sowohl Master- als auch Slave-/Leserverbindungen handhabte.

0
Emre

Wenn Sie Sequel Pro um Juni 2019 verwenden, müssen Sie zusätzlich zum Deaktivieren der Option "BLOB-Felder als Hex-Feld ausgeben" (wie oben erwähnt) auch den nächtlichen Build verwenden, der vor 2 Jahren die Unterstützung für JSON-Typen hinzugefügt hat. Dieser Support hat es noch nicht bis zur offiziellen Veröffentlichung geschafft.

0
Peter

Für diejenigen, die wie ich hier mit Symfony 4/Doctrine erstellt wurden: Aus einigen Gründen kann dieselbe Entität in einem Langtext-MySQL-Typ aufgelöst werden, der JSON speichert. oder ein Json-MySQL-Typ, der Json speichert. Durch das manuelle Einstellen des Langtext-MySQL-Typs wurde das Problem in meinem speziellen Fall behoben.

0
Moonchild

Ändern Sie die Sortierung in utf8_general_ci. arbeitete für mich 

0
Swarup Bam