我需要将Unicode列值从UTF16-LE转换为UTF-8,然后导入到MySQL中。
假设NVARCHAR、NTEXT、NCHAR、BIT、INT、DECIMAL、FLOAT和DATETIME的列都必须是Unicode,因此不会有任何字符无法从UTF-16 be转换为UTF-8,只需将值导出到.txt文件并在导入到MySQL之前用UTF-8编码将它们重新保存,是否安全?
假设Server中的unicode列在导出到CSV文件后不包含任何不能从UTF-16 Is转换为UTF-8的字符,这是否安全?
我的导入失败,不管我是否用UTF-8编码重新保存CSV .所以,我假设:
我使用bcp将值导出到CSV。然后,我用UTF-8编码重新保存它,因为MS删除了直接导出UTF-8的能力。最后,我使用MySQL的LOAD DATA INFILE导入失败的地方。
发布于 2015-11-28 18:56:47
假设NVARCHAR、NTEXT、NCHAR、位、INT、十进制、浮点数和日期时间的列都必须是UNICODE.
只有XML和N-prefixed类型(NCHAR、NVARCHAR和NTEXT 自Server 2005发布以来已被废弃,因此请不要使用它)是Unicode。您提到的其他类型不是字符串,也不是作为字符串存储的,因此它们与此问题无关。
..。因此不会有任何字符无法从UTF-16 be转换为UTF-8.
这是一个不完全正确的问题。Unicode字符是Unicode字符,无论编码是UTF-8、UTF-16 or、UTF-16 or、UTF-32 or还是UTF-32 or。现在,数据本身可能包含无效的序列,例如无效的代理对。但是,这些字符在UTF-8或UTF-32编码中也不是有效字符。
..。只需将值导出到.txt文件并在导入到MySQL之前用UTF-8编码重新保存它们?
那么,您需要确保使用Unicode编码保存初始导出文件。因此,您可以在-N或-w选项中使用BCP。
另外,确保您所做的不仅仅是更改文件的Byte Order Mark (BOM),而且实际上是将Unicode / UT-16LE字符转换为UTF-8。
https://dba.stackexchange.com/questions/50508
复制相似问题