0

下面的 SQL Insert 语句用于插入 unicode 字符串,在 SQL Server Management Studio 或 Query Analyzer 中执行时可以成功运行。

 Column Specs:
 SONUM    VARCHAR(50)
 CONTRACTNUM NVARCHAR(150)
 FNAME     VARCHAR(70)

 INSERT INTO SCH_EDI_3B12RHDR ( SONUM, CONTRACTNUM, FNAME ) 
 VALUES ( 'DPH11309160073CC' , N'Globe MUX Project(客户合同号:NA)' , 'TEST' )

使用数据存储/数据窗口进行插入操作时,是否可以实现前缀 N?如果是,如何?以下是 PB 中的当前脚本,它成功插入了数据,但中文字符/s 被替换为“?”(问号)。

ls_sonum = String(dw_1.Object.shipmentOrderNum[1]) //This holds the value : DPH11309160073CC
ls_chinesechar = String(dw_1.Object.contractnum[1])   // This holds the value : Globe MUX Project(客户合同号:NA)

dw_1.SetItem(1,'sonum',ls_sonum)
dw_1.SetItem(1,'contractnum',ls_chinesechar)
dw_1.SetItem(1,'fname','TEST')

dw.AcceptText( )

IF dw.Update( )  = 1 THEN 
   Commit Using SQLCA ;
END IF
4

2 回答 2

1

您需要将自己挂在 dw/ds 的 sqlpreview 事件上并自己添加 N'。或者,如果您使用静态(或禁用?)绑定,您根本不需要做任何事情。这一切都在在线文档中进行了解释。

于 2013-10-23T14:09:43.413 回答
0

我验证了 PB 版本 10 的 OLE DB 驱动程序支持 Unicode。您可以在此 Sybase 文档的第 9 页中找到相关信息。

ODBC/ JDBC /OLEDB/ ADO.NET 数据库支持

客户端/服务器 PowerBuilder 10 应用程序无需特殊设置即可与 ODBC、JDBC、OleDB 和 ADO.NET 数据库接口支持的数据库交换 Unicode 和 ANSI 数据。

建议在使用字符串函数时尝试强制使用不同的编码,有四种选择(参见下面的代码示例)

编码参数是以下之一:

■ 编码ANSI!

■ 编码UTF8!

■ 编码UTF16LE!– UTF-16 Little Endian 编码(PowerBuilder 10 默认)

■ 编码UTF16BE!– UTF-16 大端编码

// use the correct encoding for your actual data
ls_sonum = String(dw_1.Object.shipmentOrderNum[1], EncodingUTF16BE! ) //holds DPH11309160073CC
ls_chinesechar = String(dw_1.Object.contractnum[1], EncodingANSI!) // holds Globe MUX Project(客户合同号:NA)

我可能会引导您走错路,但我认为这值得尝试并可能解决问题。

于 2014-01-08T20:44:26.877 回答