我有一个奇怪的问题。我有一个存储文件的ASP.NET应用程序。我有一个表(SQL 2008 R2),我将文件信息存储在我的用户上传的文件中。
偶尔,当我从具有特殊字符的国际用户存储文件名时,名称在存储在数据库表中时被转换: 原始文件名示例:Łinename.mov 存储文件名:Linename.mov
当我检索文件名以构建我的路径/文件字符串时,名称不匹配,找不到我的文件。
该表将文件名存储为nvarchar,我认为这将允许unicode字符。
有什么想法吗?我更喜欢存储原始文件名,而不是重命名服务器上的文件。
修改: 我认为问题是有问题的字符不是UTF-8字符集。 我通过简化生活来解决这个问题:我支持UTF-8,如果文件在存储为UTF-8时被转换,那就是我的服务器文件名。
答案 0 :(得分:1)
NVARCHAR
确实允许使用Unicode,但你没有说的是如何对数据库进行插入 - 完全有可能在SQL Server上没有发生转换,而是在ASP.NET中发生应用
针对数据库运行SQL事件探查器并尝试存储具有非ASCII字符的文件,并查看对数据库实际执行的内容。如果Profiler显示已翻译的名称,则问题出在ASP.NET中。否则SQL Server会做一些奇怪的事情。
选中此项,然后编辑您的问题以报告结果。