Cla*_*unt 7 sql varchar nlog varbinary
我正在使用NLog登录我的应用程序,作为其中一部分,我们记录了客户编号,这是C#中的字符串,以及数据库中的varbinary(32).我对此特定参数使用以下SQL代码.SQL语句的其余部分工作正常:
CONVERT(varbinary(32), @CustNumber)
Run Code Online (Sandbox Code Playgroud)
和以下NLog参数:
<parameter name="@CustNumber" layout="${event-context:item=CustNumber}" />
Run Code Online (Sandbox Code Playgroud)
和C#中的以下代码一起添加Nlog参数:
myEvent.Properties.Add("CustNumber", custNumber);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,存储在实际表中的值仅是原始客户编号字符串的第一个字符.我有双重和三重检查,以确保我没有截断字符串发送到数据库之前.任何帮助将不胜感激.
Phi*_*hil 10
原因是当您插入时将Unicode(nvarchar(xx))字符串转换为varbinary.然后,当您选择转换为varchar(xx)时.如果你转换为nvarchar(xx)它将工作正常.
例如:
插入'这是一个测试',因为varbinary(30)导致0x7468697320697320612074657374.
插入N'this是一个测试'作为varbinary(30)导致0x74006800690073002000690073002000610020007400650073007400.
因此,当您转换回来时,如果指定varchar(30),则第一个00将截断字符串.
这对我来说很好:
delete from Table_2
insert Table_2 (Test) values( CONVERT(varbinary(30), N'this is a test') )
select * from Table_2
select CONVERT(nvarchar(30), test) from Table_2
Run Code Online (Sandbox Code Playgroud)
这样做
delete from Table_2
insert Table_2 (Test) values( CONVERT(varbinary(30), 'this is a test') )
select * from Table_2
select CONVERT(varchar(30), test) from Table_2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18933 次 |
| 最近记录: |