因缺少icu导致在wince上启动ASA出现安全错误立即终止

在wince/mobile上安装完ASA,启动时经常会碰到一个错误:检测到未知原因的安全错误,该错误破坏了程序的内部状态,该程序无法安全正确执行,必须立即终止。

这很可能是因为缺少dbicu引起的。解决方案就是复制2个相应文件到wince windows目录即可。一个文件是通用的库,dat后缀,另一个是针对不同CPU和平台的dll,这两个文件在PC上ASA安装目录中有。以asa10为例:


1,

C:\Program Files\SQL Anywhere 10\ce\dbicudt10.dat

2,

如果在arm.30平台,需要如下文件:

C:\Program Files\SQL Anywhere 10\ce\arm.30\dbicu10.dll

如果在arm.50平台,需要如下文件:

C:\Program Files\SQL Anywhere 10\ce\arm.50\dbicu10.dll


那到底什么dbicu,它到底有什么用?可以看看 sybase 官方给出的说明:

http://dcx.sybase.com/1101/zh/dbadmin_zh11/natlang-s-7944836.html


何谓 ICU、何时需要它?

ICU(即 Unicode 的国际组件)是一个由 IBM 开发并维护的开放源代码库。ICU 通过提供 Unicode 支持促进了软件国际化。SQL Anywhere 使用 ICU 实现了某些字符集转换和归类操作。

数据库服务器上何时需要 ICU?(除 Windows Mobile 之外的所有平台)

理想情况下,ICU 应始终可供数据库服务器使用。下表指出了何时以及因何需要 ICU:

需要 ICU 的情况……注意
UCA 用作 NCHAR 或 CHAR 字符集的归类。 UCA 需要 ICU。
数据库字符集不是 UTF-8,而是多字节字符集。 用于将口令从数据库字符集转换为 UTF-8(数据库口令在内部以 UTF-8 存储)。
客户端字符集与数据库字符集不同,而且其中之一是多字节字符集(包括 UTF-8)。这包括 Unicode ODBC、OLE DB、ADO.NET 和 iAnywhere JDBC 应用程序,不管数据库字符集为何,至少有一个客户端没有 ICU。 与多字节字符集的来回转换需要 ICU。
数据库字符集不是 UTF-8,且需要在 CHAR 和 NCHAR 值之间进行转换。 数据库服务器需要使用 ICU 将 UTF-8 转换为另一字符集。
嵌入式 SQL 客户端使用了 UTF-8 以外的 NCHAR 字符集。 数据库服务器需要使用 ICU 将 UTF-8 转换为另一字符集。请注意,缺省的嵌入式 SQL 客户端 NCHAR 字符集与初始客户端 CHAR 字符集相同。可使用 db_change_nchar_charse 函数对此进行更改。请参见db_change_nchar_charset 函数
使用了 CSCONVERT 或 SORTKEY 函数。调用 CSCONVERT 函数是为了在符合上述第三项要求的字符集之间进行转换。 在上述第三项要求的情况下进行转换字符集时需要 ICU。许多 sortkey 标签的 Sortkey 生成都需要 UCA,进而需要 ICU。请参见CSCONVERT 函数 [String]SORTKEY 函数 [String]
数据库服务器上何时需要 ICU?(Windows Mobile)

下表指出了 Windows Mobile 何时以及因何需要 ICU:

需要 ICU 的情况……注释
UCA 用作 NCHAR 归类或 CHAR 归类。 UCA 需要 ICU。
使用了 SORTKEY 函数。 许多 sortkey 标签的 Sortkey 生成都需要 UCA,进而需要 ICU。请参见SORTKEY 函数 [String]
CHAR 字符集与 OS 字符集不匹配。 即使这些字符集匹配,如果使用的是 NCHAR,或 CHAR 字符集为多字节,也建议使用 ICU 来增强字符集转换。
注意

如果不安装 ICU 库,则在创建数据库时,必须选择其字符集与 Windows Mobile 字符集匹配的归类或 UTF8BIN 归类作为 CHAR 归类。同样,在创建数据库时,必须选择 UTF8BIN 归类作为 NCHAR 归类。

何时在数据库服务器上不使用 ICU 就能获得正确的字符集转换?

在以下两种情况下,不使用 ICU 就能获得正确的字符集转换:数据库字符集和客户端字符集均为单字节且 sqlany.cvf 可用(所有平台);操作系统支持该转换(仅限 Windows)。这是因为只要sqlany.cvf 文件可用或主机操作系统安装了相应的转换器,就可以不使用 ICU 而进行单字节到单字节的转换。

客户端上何时需要 ICU?(除 Windows Mobile 之外的所有平台)

对于 Unicode 客户端应用程序来说,无论数据库字符集为何,当所有客户端都安装了 ICU 时,均有可能提高客户端和数据库服务器的组合性能。这是因为可以将某些必需的转换活动从数据库服务器下放到客户端,并且所需进行的转换更少。

此外,如果是在 Windows 平台上使用 ODBC,则必须在客户端安装 ICU,甚至对 ANSI 应用程序也是如此。这是因为驱动程序管理器会将 ANSI ODBC 调用转换为 Unicode ODBC 调用。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值