【问题标题】:exporting table with blob and utf8 string fields from MySql to MS Sql server 2014将带有 blob 和 utf8 字符串字段的表从 MySql 导出到 MS Sql server 2014
【发布时间】:2016-03-18 10:49:56
【问题描述】:

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

select * INTO OUTFILE '$tmp_fname'
                  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
                  LINES TERMINATED BY '\\r\\n'
                    from mytable

然后

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 中尝试了使用批量插入相同的方法,并且对于简单的类型它可以工作(我得到另一个包含 int 和 char(44) 的表)。 但在这种情况下,我会收到导入错误。 一些细节:我需要进行自动导出导入 - 这就是我使用 csv 的原因,两个服务器只能通过 http(php 脚本)进行通信。表格有数百万行。

所以这里有问题。

  1. 如何在 csv 中格式化 blob 字段数据,以便 MS SQL 可以导入它?

  2. 如何为 MS SQL 导出 utf8 字符串?我尝试了转换(使用 utf16 的 myfield),这是我需要的吗?

我还尝试在 utf16 中导出数据并在批量插入中指定 DATAFILETYPE ='widechar',但它在第一个 int 值上引发错误。它实际上无法读取widechar?

【问题讨论】:

    标签: mysql sql-server export-to-csv import-from-csv


    【解决方案1】:

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

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

    顺便说一句,最灵活的方法是使用格式文件,因为有了精确的 csv,您可以看到引号出现的位置和不出现的位置。 format file description

    1. 要从 mysql 导出 utf8 和其他非 ansi 字符串,您应该使用 HEX( (convert(str_field_name using utf16le) )) - 您可以按原样获取所有字节 - 然后批量导入到中间 mssql 表,然后合并或插入转换为 nvarchar 的目标表:cast(source.str_field_name AS nvarchar(any-length-you-need))。我花了大约一个小时才意识到 mssql 需要完全小端。

    不要尝试使用编码 utf16le 'select ... into outfile',只需将其保留为默认值,因为我们将所有字符串转换为十六进制二进制文件的所有内容都是纯 ansi 输出。 批量插入以某种方式拒绝导入宽字符(utf16le)csv 以及 utf16be。所以也许 hex-bin 解决方案不是那么快,但它是通用的。

    【讨论】:

    • 我已经使用HEX(CONVERT(Metadata USING utf16le)) 导出数据,现在我无法使用CAST(CONVERT(varbinary(MAX), Metadata) AS NVARCHAR(MAX))CAST(Metadata AS NVARCHAR(MAX)) 将它们翻译回SQL Server。
    • 这是有效的:CAST( CONVERT(varbinary(MAX), column, 2) as nvarchar(max))
    猜你喜欢
    • 2023-03-17
    • 2015-07-13
    • 2012-03-13
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 2011-09-25
    相关资源
    最近更新 更多