【问题标题】:DB2/400 field with CCSID 1208 (UTF-8) and oledbtype issue具有 CCSID 1208 (UTF-8) 和 oledbtype 问题的 DB2/400 字段
【发布时间】:2012-12-08 10:25:30
【问题描述】:

我在 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 个字符。我不能让它在字段中使用 60 个字符的长度。

我觉得很奇怪,我需要将字段的真实长度加倍(我对所有字符串字段都这样做了)才能使其正常工作。

更新:正确的实现是将DB中的字段定义为nvarchar,oledbtype定义为varWchar。

【问题讨论】:

    标签: c# .net unicode db2 oledbconnection


    【解决方案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)。
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多