C# 具有CCSID 1208(UTF-8)和OLEDB类型问题的DB2/400字段
我在AS/400 DB2表中有一个表:C# 具有CCSID 1208(UTF-8)和OLEDB类型问题的DB2/400字段,c#,.net,unicode,db2,oledbconnection,C#,.net,Unicode,Db2,Oledbconnection,我在AS/400 DB2表中有一个表: SCDSC VARCHAR(120) CCSID 1208 DEFAULT NULL , CCSID 1208表示UTF-8 在我的c#代码中,这是有效的定义 cmd.Parameters.Add("scdsc", OleDbType.VarChar , 120); 我也尝试过VarWChar类型: cmd.Parameters.Add("scdsc", OleDbType.VarWChar , 120); 问题是该字段最多只能包含60个字符。我
SCDSC VARCHAR(120) CCSID 1208 DEFAULT NULL ,
CCSID 1208表示UTF-8
在我的c#代码中,这是有效的定义
cmd.Parameters.Add("scdsc", OleDbType.VarChar , 120);
我也尝试过VarWChar类型:
cmd.Parameters.Add("scdsc", OleDbType.VarWChar , 120);
问题是该字段最多只能包含60个字符。我不能让它在字段中有60个字符的长度
我觉得奇怪的是,我需要将字段的真实长度加倍(我对所有字符串字段都这样做)才能使其工作
更新:正确的实现是将DB中的字段定义为nvarchar,将oledbtype定义为varWchar。您应该将列定义为nvarchar。您正在定义它varchar 120,这意味着它只能容纳120个字节,而不是所需的240个字节
varchar类型用于非unicode,1字节=1字符字符串。您应该将列定义为nvarchar。您正在定义它varchar 120,这意味着它只能容纳120个字节,而不是所需的240个字节
varchar类型用于非unicode,1byte=1字符字符串。所以在c#和DB2中必须是VarWChar 60?varchar(6)不起作用。也许是nvarchar(60)?@e4rthdog不,我的意思是,您用varchar(120)定义了您的列,其中应该是varwchar(120)…我得到了它,但首先我需要一个60个字符的字段的空间…所以为了能够容纳60个字符,我必须定义varwchar(60)和DB2 nvarchar(60)?(现在我有varchar而不是nvarchar)@e4rthdog啊,如果您需要60个unicode字符,那么将字段定义为nvarchar(60),而不是varchar(60)。那么在c#和DB2中它必须是VarWChar 60?varchar(6)不起作用。也许是nvarchar(60)?@e4rthdog不,我的意思是,您用varchar(120)定义了您的列,其中应该是varwchar(120)…我得到了它,但首先我需要一个60个字符的字段的空间…所以为了能够容纳60个字符,我必须定义varwchar(60)和DB2 nvarchar(60)?(现在我有了varchar而不是nvarchar)@e4rthdog啊,如果您需要60个unicode字符,那么将字段定义为nvarchar(60),而不是varchar(60)。