C# 在C中将数据从nvarchar转换为varchar#
作为我正在执行的集成任务的一部分,我的数据库中有一个类型为nvarchar(30)的列,我需要调用WCF服务并传递此列(以及其他列)中的值,然后这些值将存储在另一个数据库中类型为varchar(30)的列中 我应该怎么做(大概是在调用WCF服务的代码中)才能将我的字符串转换成“varchar友好”字符串C# 在C中将数据从nvarchar转换为varchar#,c#,database,encoding,character-encoding,C#,Database,Encoding,Character Encoding,作为我正在执行的集成任务的一部分,我的数据库中有一个类型为nvarchar(30)的列,我需要调用WCF服务并传递此列(以及其他列)中的值,然后这些值将存储在另一个数据库中类型为varchar(30)的列中 我应该怎么做(大概是在调用WCF服务的代码中)才能将我的字符串转换成“varchar友好”字符串 最新消息:还没有出现任何问题。然而,我将通过这项服务进行120000条记录的初始迁移,然后每天通过这项服务推送大约300条新记录。因此,任何形式的人工干预都是非常不可取的,我只是在考虑可能出现的
最新消息:还没有出现任何问题。然而,我将通过这项服务进行120000条记录的初始迁移,然后每天通过这项服务推送大约300条新记录。因此,任何形式的人工干预都是非常不可取的,我只是在考虑可能出现的问题。我无法控制目标数据库(使用VARCHAR列),但是我知道它是SQL Server和C#用于应用程序(不确定它们是否使用ADO.NET)。如果目标列表示ascii字符,那么只需使用Encoding.Convert方法即可 例如:
Encoding.ASCII.GetString(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytes))
如果目标列表示ascii字符,那么只需使用Encoding.Convert方法即可 例如:
Encoding.ASCII.GetString(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytes))
无需执行任何操作:.NET中的所有字符串:
- 当您检索
列时(我假定使用ADO.NET),您会自动获得一个.NET字符串(UTF-16,任何必要的转换都是自动的)NVARCHAR
- 当您将此.NET字符串存储在
列中时,也会自动执行从UTF-16进行的任何必要转换VARCHAR
您只需确保所有字符串都能完美地从源字符集转换到目标字符集。您无需执行任何操作:.NET中的所有字符串:
- 当您检索
列时(我假定使用ADO.NET),您会自动获得一个.NET字符串(UTF-16,任何必要的转换都是自动的)NVARCHAR
- 当您将此.NET字符串存储在
列中时,也会自动执行从UTF-16进行的任何必要转换VARCHAR
您只需确保所有字符串都能从源字符集完美地转换到目标字符集。您的问题不在于数据类型,而在于数据。可以存储为nvarchar的所有可能值在varchar中都没有等效值(取决于排序规则)。如果第二个数据库在您的控制下,传递数据的最省事的方法是现在将varchar字段更改为nvarchar
如果您不能这样做,那么您需要在发送数据之前检查数据,以确保它是可以转换的数据。根据您遇到的数据问题的类型,您可能希望删除无法转换的字符或用其他字符替换这些字符,或者将记录放入某种类型的保留表中,而不是将其发送以进行管理性修复。艾哈迈德的建议看起来是有可能的,我还没有尝试过,所以我不知道它是否有效。您可能很幸运,没有任何数据问题(并非所有使用nvarchar的数据库都使用具有适当国家/地区排序规则的varchar不会使用的任何字符),但您必须计划解决该问题。您的问题不是数据类型,而是数据。可以存储为nvarchar的所有可能值在varchar中都没有等效值(取决于排序规则)。如果第二个数据库在您的控制下,传递数据的最省事的方法是现在将varchar字段更改为nvarchar
如果您不能这样做,那么您需要在发送数据之前检查数据,以确保它是可以转换的数据。根据您遇到的数据问题的类型,您可能希望删除无法转换的字符或用其他字符替换这些字符,或者将记录放入某种类型的保留表中,而不是将其发送以进行管理性修复。艾哈迈德的建议看起来是有可能的,我还没有尝试过,所以我不知道它是否有效。您可能很幸运,没有任何数据问题(并非所有使用nvarchar的数据库都使用varchar和正确的国家/地区排序规则不会使用的任何字符),但您必须计划解决该问题。UTF-16,根据我刚才添加的链接,我想我应该可以安全地在字符集之间进行转换,因为绝大多数字符集都是纯英语的,但该网站在国际上是可用的,所以如果人们开始输入非英语内容,将会发生什么事,这将是很有趣的。UTF-16,根据我刚才添加的链接,我想我应该可以安全地在字符集之间进行转换,因为绝大多数字符集都是纯英语的,但该网站是国际性的,因此,如果人们开始输入非英语内容,将会发生什么事,这将是很有趣的。我想是Sql Server吧?使用ADO.NET访问数据库?您遇到了哪些具体问题?Mac-我会使用您的解决方案(对我来说最简单:),如果出现问题,我会向您报告。我想是Sql Server吧?使用ADO.NET访问数据库?您遇到了哪些具体问题?Mac-我将使用您的解决方案(对我来说最简单:),如果出现问题,我将向您报告。鉴于我们的目标受众,绝大多数内容都应与varchar兼容。然而,这个网站是国际通用的,所以我会密切关注那些转化率不高的内容,如果/当它出现时,我会跨越这座桥梁。那么当我把我的公司名称写出来的时候呢(❤技术人员)在您的联系方式中?我会说英语,但我仍然喜欢使用非ansi字符。为了吸引目标受众,绝大多数内容都应该与varchar兼容。然而,该网站是国际性的,所以我会密切关注正在转换的内容