gpt4 book ai didi

mysql - 将包含 blob 和 utf8 字符串字段的表从 MySql 导出到 MS Sql server 2014

转载 作者:行者123 更新时间:2023-11-29 11:39:19 27 4
gpt4 key购买 nike

我有一个包含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. 如何将 Blob 字段数据格式化为 csv 以便 MS SQL 可以导入它?

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

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

最佳答案

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

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

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

  • 要从 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 编码“选择...到输出文件”,只需保留默认值,因为我们将所有字符串转换为十六进制二进制的所有内容都是纯 ansi 输出。批量插入以某种方式拒绝导入 Widechar (utf16le) csv 以及 utf16be。所以也许 hex-bin 解决方案不是那么快,但它是通用的。

    关于mysql - 将包含 blob 和 utf8 字符串字段的表从 MySql 导出到 MS Sql server 2014,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082433/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com