我有一个包含二进制(32)、blob和varcharutf-8字段的表。从一个mysql服务器到另一个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中对bulk insert也尝试了同样的方法,对于简单的类型,它可以工作(我得到了另一个包含int和char(44)的表)。但在这种情况下,我会得到导入错误。一些detials:我需要进行自动导出-导入-这就是为什么我使用csv,两台服务器只能通过http (php脚本)进行通信。表有数百万行。
下面是一些问题。
另外,我试图在utf16中导出数据,并在批量插入中指定DATAFILETYPE ='widechar‘,但是它会在第一个int值上抛出一个错误。它真的看不懂吗?
发布于 2016-03-18 17:42:20
奇怪的是,没有专业人士知道答案。
field_name),然后按原样导入到mssql。顺便说一句,最灵活的方法是使用格式文件,因为有确切的csv,你可以看到引号在哪里出现,哪里没有。格式文件描述
str_field_name使用utf16le ) ) --按其原样获取所有字节--然后批量导入到中间mssql表,然后合并或插入到目标表,转换为nvarchar: cast(source.str_field_name as nvarchar(任意长度-需要))。我花了大约一个小时才意识到mssql确实需要少量的endian。不要尝试使用编码utf16le来“选择.到外文件”,只需将其保留为默认值,因为我们将所有字符串转换为十六进制二进制文件的所有内容都是纯ansi输出。Bulk拒绝进口widechar (utf16le) csv和utf16be。因此,也许十六进制解决方案不是那么快,但它是普遍的。
https://stackoverflow.com/questions/36082433
复制相似问题