在powerbuilder中使用odbc连接mysql5数据库中文乱码解决方法

tag:powerbuilder odbc mysql 中文乱码
作者:benjaminz(zeng78@gmail.com)


时间:2008-11-14







由于一个项目中要使用mysql作为数据库,前端的开发工具定为powerbuilder9,安装好mysql数据库和mysql的odbc驱动后,使用powerbuilder9连接成功,可以看到数据库中的表和非汉字信息,可是读取的汉字信息均显示为???,使用数据窗口向mysql的表中插入中文也显示为???,经过若干baidu和google以及无数次试验,终于搞定,下面将方法列出,供以后参考。


1、你的数据库中尚未建表


2、进入你的mysql安装目录,找到my.ini,在该文件中增加如下字段并重新启动你的mysql

[mysql]
default-character-set=utf8

[mysqld]
default-character-set=utf8

 

3、建立数据库,建立数据表


4、在开发端机器上安装mysql的odbc驱动,并按照下图配置odbc的dsn信息,请注意红框中的内容,其中如server等的项目要填你自己mysql的真实信息







5、打开powerbuilder9,进入tools->database profiles->odbc段,新建一个,然后如下图所示的配置,请注意红框中的内容,这里的charset一定要使用gbk而不能使用utf8,不然还是会出现乱码情况。
其中的option=136168是mysql专门为powerbuilder提供的优化参数,如果是vb的话这个值是3











如果你在配置中遇到什么问题,可以发邮件给我。

 

<think>好的,我现在要解决用户的问题:PowerBuilder 9连接UTF8字符集的Oracle 19c出现乱码。首先,我需要了解PowerBuilder 9在处理字符集时可能存在的问题。根据引用[2],用户之前遇到MySQL连接乱码的问题,通过使用支持字符集设置的驱动解决了问题。类似地,Oracle连接可能需要正确配置字符集。 PowerBuilder 9默认可能使用旧的字符编码,如ISO-8859-1,而Oracle 19c使用UTF8,这会导致编码不一致,出现乱码。需要确认PB连接的字符集设置是否正确。引用[2]中提到在C#中设置Charset=utf8解决了问题,可能PB也需要类似设置。 接下来,检查ODBC或Oracle客户端配置。Oracle客户端(如OCI)的字符集设置需要与数据库一致,即UTF8。可以修改环境变量NLS_LANG为AMERICAN_AMERICA.AL32UTF8,确保客户端和服务器端字符集匹配。引用[1]中的字符集设置为utf8,可能相关。 另外,PB9可能不支持Unicode,需要确认其版本是否支持。如果不行,可能需要升级或使用中间件转换编码。引用[4]中处理Excel文件时指定编码,或许类似的方法可以应用,比如在数据检索后转换编码。 最后,测试连接并检查数据。如果仍有问题,可能需要检查字段类型或使用转码函数。引用[3]中设置charset=ISO8859-1,但用户需要UTF8,所以应避免这种情况。 总结可能的解决方案步骤:设置NLS_LANG环境变量,配置PB的客户端字符集,检查驱动支持,必要时转换数据编码。</think>### PowerBuilder 9 连接 UTF8 Oracle 19c 乱码解决方案 #### 1. **确认字符集一致性** - **Oracle 服务器端字符集**:需确保数据库字符集为 `AL32UTF8`(Oracle 19c 默认 UTF8 编码)。可通过以下 SQL 查询: ```sql SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; ``` - **客户端字符集配置**:PowerBuilder 通过 Oracle 客户端(如 ODBC 或 OCI)连接时,需设置客户端字符集与服务器一致。 **操作步骤**: 1. 在客户端环境变量中设置 `NLS_LANG`,例如: ```bash NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ``` 2. 若通过 ODBC 连接,需在 ODBC 数据源配置中指定字符集(部分驱动支持)[^1][^2]。 #### 2. **调整 PowerBuilder 连接参数** - **在连接字符串中显式指定字符集**(若驱动支持): ```powerbuilder SQLCA.DBParm = "PBCatalogOwner='', Charset='utf8'" ``` - **使用支持 UTF8 的 Oracle 驱动**: - 确保 Oracle 客户端版本为 19c 兼容版本(如 Oracle 19c Instant Client)。 - 更新 PB9 的 Oracle 驱动文件(如 `PBORA90.DLL`),必要时联系 Sybase 支持获取补丁[^2]。 #### 3. **处理 PowerBuilder 9 的编码限制** - **问题**:PB9 默认使用 ANSI 编码(如 `ISO-8859-1`),可能与 UTF8 不兼容[^3]。 - **解决方案**: 1. **数据转换**:在 SQL 查询中使用 `CAST` 函数转换字段编码,例如: ```sql SELECT CAST(field_name AS VARCHAR2(100) CHAR) FROM table_name; ``` 2. **代码中手动转码**:通过 PB 脚本或外部 DLL 对返回的数据进行 UTF8 解码(需自定义函数)。 #### 4. **测试与验证** - **步骤**: 1. 执行简单查询(如 `SELECT '测试' FROM dual`),检查返回结果是否正常。 2. 若仍乱码,检查 `NLS_LANG` 环境变量是否生效,或尝试重启 PB 应用。 #### 5. **备选方案** - **升级 PowerBuilder**:PB9 已较老旧,建议升级至 PB 2019+ 版本(原生支持 Unicode)[^2]。 - **中间件转码**:通过 Java/C# 服务层访问 Oracle,PB 调用该服务层获取已转码的数据[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值