I exported my database with JSON columns in it. After I migrated to a new server, my import crashed every time with an error like:
cannot create a JSON value from a string with CHARACTER SET 'binary'
On stackoverflow, I found this post but didn't work for me:
mysqlimport issues "set @@character_set_database=binary" which prevents loading json values
The file is 2GB and isn't possible to open the file.
Anyone has an idea to import my database file?
All MySQL JSON data type information must be UTF8MB4 character set not BINARY.
You can apply a regex to the SQL text which you exported which will convert your binary strings into an insertable format. This was my quick and dirty fix when I faced this issue
(X'[^,\)]*')
CONVERT($1 using utf8mb4)
Applying this regex means
INSERT INTO json_table (json_column) VALUES (X'7B22666F6F223A2022626172227D');
will now become
INSERT INTO json_table (json_column) VALUES (CONVERT(X'7B22666F6F223A2022626172227D' using utf8mb4));
I had this problem dealing with exports made by Sequel Pro. I unchecked the Output BLOB fields as hex
option and the problem went away. Visually inspecting the export showed legible JSON instead of binary.
This worked for me, (I had control of the export to the sql file as well). There're lots of caveats; e.g. I knew that the fields would never be bigger than 1000 and wouldn't contain any non-ascii chars.
Please do comment and tell me all the whys this is so bad tho :)
Before export
alter table <table> modify <json_column> varchar(1000);
Then after import
alter table <table> modify <json_column> json;
change collation to utf8_general_ci. worked for me.
I had this problem with a dump. i was able to fix it by changing the line in the dump file from:
/*!40101 SET NAMES binary*/;
to
/*!40101 SET NAMES utf8mb4*/;
For the ones like me arived here using Symfony 4 / Doctrine : For some reasons the same entity can be resolved in a longtext MySQL type storing JSON; or a json MySQL type storing json. Manually setting longtext MySQL type resolved the problem in my particular case.
I faced the same issue today. Below were the findings for my case,
I asked one of my friend to generate an SQL dump for me to import. He used sequel-pro
to generate the dump (export database). When I did the import it threw an error
Cannot create a JSON value from a string with CHARACTER SET 'binary'
So, there was an issue with the generated dump, all the json
fields were converted to some raw format i.e. instead of value being
"{'key1':'value1', 'key2':'value2'}"
it was,
X'nfdsklsdsklnfjkbvkjsdbvkjhdfsbvkjdsbnvljkdsbvkjhdfbvkjdfbvjkdfb'
So, when importing the dump i.e. running the insert
statements mysql
could not process the data as it was not of json
type.
Here is a link to the bug reported
https://github.com/sequelpro/sequelpro/issues/2397
You need to uncheck the Output BLOB fields as hex
option.