Dan*_*ers 42 mysql import json mysql-json
我在其中导出了包含JSON列的数据库.迁移到新服务器后,我的导入每次都崩溃,出现如下错误:
无法从CHARACTER SET'binary'的字符串创建JSON值
在stackoverflow上,我找到了这篇文章,但对我来说不起作用: mysqlimport发出"set @@ character_set_database = binary",这会阻止加载json值
该文件为2GB,无法打开该文件.
任何人都有想法导入我的数据库文件?
Lor*_*ill 108
您可以将正则表达式应用于导出的SQL文本,该文本将二进制字符串转换为可插入格式.当我遇到这个问题时,这是我快速而又肮脏的修复
(X'[^,\)]*')
CONVERT($1 using utf8mb4)
Run Code Online (Sandbox Code Playgroud)
应用此正则表达式意味着
INSERT INTO json_table (json_column) VALUES (X'7B22666F6F223A2022626172227D');
Run Code Online (Sandbox Code Playgroud)
现在将成为
INSERT INTO json_table (json_column) VALUES (CONVERT(X'7B22666F6F223A2022626172227D' using utf8mb4));
Run Code Online (Sandbox Code Playgroud)
Hen*_*nry 80
我有这个问题处理Sequel Pro的出口.我取消选中该Output BLOB fields as hex选项,问题就消失了.目视检查导出显示清晰的JSON而不是二进制.
swa*_*ina 18
我今天也面临着同样的问题。以下是我的案例的发现,
我请一位朋友生成一个SQL转储供我导入。他曾经sequel-pro生成转储(导出数据库)。当我执行导入时,它引发了一个错误。Cannot create a JSON value from a string with CHARACTER SET 'binary'
因此,生成的转储存在问题,所有json字段都转换为某种原始格式,即不是
原来的值
"{'key1':'value1', 'key2':'value2'}"
,
X'nfdsklsdsklnfjkbvkjsdbvkjhdfsbvkjdsbnvljkdsbvkjhdfbvkjdfbvjkdfb'
所以,当导入转储时,即运行insert语句mysql无法处理数据,因为它不是json类型。
这是报告的错误的链接
https://github.com/sequelpro/sequelpro/issues/2397
您需要取消选中该Output BLOB fields as hex选项。
小智 10
vim 版本对于 Lorcan O'Neill 的回答
vi xxxx.sql
:%s/\(X'[^,\)]*'\)/CONVERT(\1 using utf8mb4)/g
Run Code Online (Sandbox Code Playgroud)
小智 6
这对我有用(我也控制了到sql文件的导出)。有很多警告。例如,我知道这些字段永远不会大于1000,并且不包含任何非ascii字符。请发表评论,并告诉我所有为什么这样糟糕的原因:)
出口前
alter table <table> modify <json_column> varchar(1000);
Run Code Online (Sandbox Code Playgroud)
然后导入
alter table <table> modify <json_column> json;
Run Code Online (Sandbox Code Playgroud)
对于那些在 2019 年 6 月左右使用 Sequel Pro 的用户,除了取消选中“将 BLOB 字段输出为十六进制选项”(如上所述)之外,您还需要使用夜间构建,它在 2 年前增加了对 JSON 类型的支持。此支持尚未正式发布。
| 归档时间: |
|
| 查看次数: |
23603 次 |
| 最近记录: |