因此,我决定阅读文本文件并使用TSQL和Microsoft SQL Server Management Studio 2008 R2将内容存储到NVARCHAR
中。我在https://www.simple-talk.com/sql/t-sql-programming/the-tsql-of-text-files/
所以我用我的ABC.txt
文件尝试了这个,其内容是:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
当我第一次尝试将此文件的内容存储到@myString
时,我使用了以下代码:
declare @myString nvarchar(max);
Select @myString = BulkColumn
from OPENROWSET(Bulk 'C:\Users\<myComputer'sNameHere>\Documents\How2\FilesForTestingStuff\ABC.txt', SINGLE_BLOB) as x
print @myString;
当我打印字符串时,我将此作为输出:
䉁䑃䙅䡇䩉䱋乍偏剑呓噕涂婙扡摣晥桧橩汫湭灯牱瑳癵硷穹
我将nvarchar
更改为varchar
,我获得了该文件的正确内容。
任何人都知道为什么会这样吗?除了nvarchar
之外,除了varchar
之外,我认为转换差异不大于nvarchar
并且能够保存unicode字符。
另外,您通常如何尝试从文件中读取并将内容插入{{1}}?
答案 0 :(得分:3)
我认为这取决于输入文件的编码。
您使用了SINGLEBLOB
,根据MSDN,它会将数据作为varbinary(MAX)
返回。您的文件可能使用非unicode编码保存,因此当将数据导入nvarchar
列时,SQL会错误地解释它。更改类型允许正确读取字符。请尝试使用UTF-16对文件进行编码,并尝试将数据导入nvarchar(MAX)变量。
<强>更新强>
我尝试重新创建您描述的问题。我已经使用ANSI编码保存了一个文本文件,运行导入脚本并获得类似于您在问题中发布的输出。然后,我将文件转换为 UCS-2 Little Endian 编码,运行脚本后输出正确。
总结一下,如果您想使用SINGLEBLOB
选项导入,只需将文件转换为数据即可使用 UCS-2 Little Endian 编码它应该与nvarchar
SQL类型一起正常工作。
参考链接: