ISAPI应用程序中的字符问题(ő,ű)

时间:2018-10-24 09:17:59

标签: sql-server delphi iis isapi

我有一个Windows 2016服务器操作系统和一个MSSQL 2017 DB。

我的桌子如下:

CREATE TABLE [dbo].[temp_table](
[varchar_250] [varchar](250) NULL,
[varchar_4000] [varchar](4000) NULL,
[varchar_max] [varchar](max) NULL,
[nvarchar_250] [nvarchar](250) NULL,
[nvarchar_4000] [nvarchar](4000) NULL,
[nvarchar_max] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

此表有一行, 并且所有单元格的值都是“őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓúúÚÚééÉááÁÁ”字符串。

我在Delphi中编写了一个exe程序,一个简单的dll程序和一个isapi dll程序。 所有程序都包含一个过程。此过程包含一个从temp_table中读取的查询。之后,该过程将值写入txt文件。

我的exe程序调用该过程:

  1. 直接
  2. 来自简单的dll
  3. 从isapi dll作为外部过程

结果始终是1-3中的以下内容:

列类型varchar_250,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓÓúúÚÚééÉÉááÁÁ

列类型varchar_4000,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓÓúúúééÉÉÉááÁÁ

列类型varchar_max,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓÓúúúééÉÉÉááÁÁ

列类型nvarchar_250,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓúúúúééÉÉááÁÁ

列类型nvarchar_4000,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓÓúúÚÚééÉÉááÁÁ

列类型nvarchar_max,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓúúúÚÚééÉÉÉááÁÁ

但是,当我将isapi dll加载到浏览器中时,程序会生成文本文件,但数据不正确:

列类型varchar_250,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓÓúúÚÚééÉÉááÁÁ

列类型varchar_4000,值:őőŐŐűűŰŰööÖÖüüüÜÜóóÓÓÓÓúúúééÉÉÉááÁÁ

列类型varchar_max,值:ooOOuuUUööÖÖüüüÜÜóóÓÓÓÓúúÚÚééÉÉááÁÁ

列类型nvarchar_250,值:ooOOuuUUööÖÖüüüÜÜóóÓÓÓÓúúúÚÚééÉÉááÁÁ

列类型nvarchar_4000,值:ooOOuuUUööÖÖüüüÜÜóóÓÓÓÓúúúÚÚééÉÉááÁÁ

列类型nvarchar_max,值:ooOOuuUUööÖÖüüüüÜÜóóÓÓÓÓúúÚÚééÉÉááÁÁ

在1-3种情况下,该过程由我的用户调用,在最后一种情况下,该过程由IIS调用。

最后一种情况是什么问题?

预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

使您的varchar大小乘以2。因此对于varchar(250)将变为varchar(500)。不确定内部结构,但可以解决问题。