2016-06-28 23 views
11

Wyeksportowałem moją bazę danych z kolumnami JSON w niej. Po I przeniesione na nowy serwer, moja import rozbił się za każdym razem z błędem jak:import MySQL 5.7.12 nie może utworzyć wartości JSON z ciągu znaków z CHARACTER SET 'binary'

nie może tworzyć wartość JSON z ciągu znaków z zestawu znaków „binarny”

Na stackoverflow znalazłem to ale nie działa dla mnie: mysqlimport issues "set @@character_set_database=binary" which prevents loading json values

Plik ma 2 GB i nie można otworzyć pliku.

Ktoś ma pomysł na zaimportowanie pliku mojej bazy danych?

Odpowiedz

2

Wszystkie informacje o typie danych MySQL JSON muszą być ustawione jako UTF8MB4, a nie BINARY.

+2

Czy jest możliwe aby wymusić ten sposób z prądem Zrzut SQL, żeby to naprawić? –

+0

Jak przekonwertować go na UTF8MB4? Otrzymuję komunikat o błędzie, gdy używam 'ALTER TABLE nazwa_tabeli CHANGE nazwa_kolumości nazwa_polski JSON CHARACTER SET utf8mb4;' – burakcalik

+1

Nie jestem pewny, czy to jest odpowiedź, bardziej jak oświadczenie. Jak uzyskać import po tym wydaniu? – Ray

40

Można zastosować wyrażenie regularne do wyeksportowanego tekstu SQL, który przekształci ciągi binarne w format, który można wstawić. To był mój szybki i brudny fix, kiedy w obliczu tego problemu

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

Zastosowanie tej regex oznacza

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

będzie teraz

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

To mnie uratowało, dzięki! –

+0

To też mnie uratowało! dzięki: D – gpopoteur

+4

To powinna być poprawna odpowiedź. – rootr

3

ten pracował dla mnie, (miałem kontrolę eksport do pliku sql). Istnieje wiele zastrzeżeń; na przykład Wiedziałem, że pola nigdy nie będą większe niż 1000 i nie zawierają żadnych znaków spoza ASCII. Proszę zrobić komentarz i powiedz mi wszystkie whys jest tak źle tho :)

przed wywozem

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

Następnie po imporcie

alter table <table> modify <json_column> json;