缓存ODBC字符

时间:2014-04-14 12:08:50

标签: php crystal-reports odbc intersystems-cache

好的,我们的数据库是Intersystems Cache,我试图通过php从这一个表中获取值。我设法得到了值,但有些值不完整,最后有符号。

这是人物.. php99¥7“\ß|

然后我试图通过水晶报告获取值..没有符号,但仍然长值不完整,我查看字段类型,它显示字符串[30],所以我认为它限制为30个字符。但是当在vb应用程序中查看时,它显示超过30个字符。

示例:

php = "The quick brown fox jumps overphp99¥7“\ߦ"
crystal reports = "The quick brown fox jumps over"
VB application = "The quick brown fox jumps over the lazy dog"

我没有VB的源代码所以我无法真正看到它运行的是什么sql。

任何人都可以帮助我......?

2 个答案:

答案 0 :(得分:1)

当直接使用caché中的globals时,不会验证表的列长度约束。 这样就可以将比列的最大长度更长的信息放入一行。

另一方面,ODBC和可能还有水晶报告(我认为他们在后台使用odbc)将其列长度基于表的定义。

在这种情况下,简单的解决方案是提高相关色谱柱的长度。这将使水晶报告和php都返回正确的值。问题是,这是否能解决您的问题。也许您希望列的最大长度为30个字符。在这种情况下,需要在VB应用程序中构建一个硬检查,直接访问全局变量。

答案 1 :(得分:0)

我也经历过这个错误。问题是由PDO_ODBC unicode转换引起的,我通过修补PHP源修复它。

文件:ext / pdo_odbc / odbc_stmt.c 替换行(我的安装中的#631)

S->cols[colno].datalen+1, &S->cols[colno].fetched_len);

S->cols[colno].datalen*2+1, &S->cols[colno].fetched_len);

我知道这个解决方案并不理想,但在我的情况下效果很好。