首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有blob和utf8字符串字段的表从MySql导出到MySql 2014

问将带有blob和utf8字符串字段的表从MySql导出到MySql 2014
EN

Stack Overflow用户
提问于 2016-03-18 10:49:56
回答 1查看 1.9K关注 0票数 0

我有一个包含二进制(32)、blob和varcharutf-8字段的表。从一个mysql服务器到另一个mysql服务器,我通过csv导出数据:

代码语言:javascript
复制
select * INTO OUTFILE '$tmp_fname'
                  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
                  LINES TERMINATED BY '\\r\\n'
                    from mytable

然后

代码语言:javascript
复制
load data local infile '" . $mysqli->real_escape_string($glb) . "' ignore into table mytable_temp
        CHARACTER SET 'utf8'
          FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
                  LINES TERMINATED BY '\\n' 

我在MSSQL中对bulk insert也尝试了同样的方法,对于简单的类型,它可以工作(我得到了另一个包含int和char(44)的表)。但在这种情况下,我会得到导入错误。一些detials:我需要进行自动导出-导入-这就是为什么我使用csv,两台服务器只能通过http (php脚本)进行通信。表有数百万行。

下面是一些问题。

  1. 如何在csv中格式化blob字段数据,以便MS能够导入它?
  2. 如何为MS导出utf8字符串?我尝试过转换(我的字段使用utf16),这是我需要的吗?

另外,我试图在utf16中导出数据,并在批量插入中指定DATAFILETYPE ='widechar‘,但是它会在第一个int值上抛出一个错误。它真的看不懂吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-18 17:42:20

奇怪的是,没有专业人士知道答案。

  1. blob和二进制字段应该导出为HEX(field_name),然后按原样导入到mssql。

顺便说一句,最灵活的方法是使用格式文件,因为有确切的csv,你可以看到引号在哪里出现,哪里没有。格式文件描述

  1. 要从mysql导出utf8和其他非ansi字符串,您应该使用HEX(转换(str_field_name使用utf16le ) ) --按其原样获取所有字节--然后批量导入到中间mssql表,然后合并或插入到目标表,转换为nvarchar: cast(source.str_field_name as nvarchar(任意长度-需要))。我花了大约一个小时才意识到mssql确实需要少量的endian。

不要尝试使用编码utf16le来“选择.到外文件”,只需将其保留为默认值,因为我们将所有字符串转换为十六进制二进制文件的所有内容都是纯ansi输出。Bulk拒绝进口widechar (utf16le) csv和utf16be。因此,也许十六进制解决方案不是那么快,但它是普遍的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36082433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档