2016-06-28 48 views
11

Ho esportato il mio database con colonne JSON al suo interno. Dopo che ho migrato su un nuovo server, la mia importazione è schiantato ogni volta con un errore simile:L'importazione di MySQL 5.7.12 non può creare un valore JSON da una stringa con CHARACTER SET 'binary'

non può creare un valore JSON da una stringa con il carattere SET 'binario'

su StackOverflow, ho trovato questo post ma non ha funzionato per me: mysqlimport issues "set @@character_set_database=binary" which prevents loading json values

Il file è 2 GB e non è possibile aprire il file.

Qualcuno ha un'idea per importare il mio file di database?

risposta

2

Tutte le informazioni sul tipo di dati MySQL JSON devono essere il set di caratteri UTF8MB4 non BINARIO.

+2

Esiste un possibile modo per forzare questo con una corrente Dump SQL per risolvere questa cosa? –

+0

Come convertirlo in UTF8MB4? Ottengo errore quando uso 'ALTER TABLE nome_tabella CHANGE nome_col nome_col JSON SET CARATTERE utf8mb4;' – burakcalik

+1

Non sono sicuro che la sua sia una risposta, più come una dichiarazione. Come si fa a importare questo problema? – Ray

40

È possibile applicare un'espressione regolare al testo SQL esportato che convertirà le stringhe binarie in un formato inseribile. Questa era la mia soluzione rapida e sporco quando ho affrontato questo problema

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

Applicando questa espressione regolare significa

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

ora diventerà

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

Questo mi ha salvato, grazie! –

+0

Anche questo mi ha salvato! grazie: D – gpopoteur

+4

Questa dovrebbe essere la risposta corretta. – rootr

3

Questo ha funzionato per me, (ho avuto il controllo della l'esportazione nel file sql pure). Ci sono molti avvertimenti; per esempio. Sapevo che i campi non sarebbero mai stati più grandi di 1000 e non conterrebbero caratteri non ascii. Si prega di commento e mi dicono tutti i perché questo è così male tho :)

Prima di esportazione

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

Poi, dopo l'importazione

alter table <table> modify <json_column> json;