首页 > 解决方案 > 使用 Firebird C API 和参数化插入进行空终止符 + 字符串匹配

问题描述

我有几个 VARCHAR 列。使用参数化语句执行插入后,我想查询其中一个,例如select * from my_table where name = 'my_varchar'.

如果我插入我的 char 数组,这将正常工作sqllen=strlen(my_char_array)。但是,字符串在读取时不会以空值终止。我可以在 sqllen 添加一个空终止符,但是我的字符串都将是 varchar 的最大大小。如果我设置sqllen=strlen(my_char_array)+1,则字符串具有正确的空终止符以供读取,但 select 语句失败(由于此添加的字符,没有匹配 'max' )。如果我这样做,它可以与添加的空终止符一起使用select * from my_table where name like 'my_varchar%',但这似乎是一个相当不雅的解决方案。

有没有办法获得正确的空终止字符串,同时仍然允许精确的相等字符串搜索正常工作?我有一种感觉,我错过了一些非常简单的东西,如果有任何建议,我将不胜感激!

标签: firebird

解决方案


在 Firebird API 中无法获取或使用以 null 结尾的字符串。

SQL_TEXT 是一个固定长度的字符数组。
SQL_VARYING 是一个 param_vary 结构,具有长度和固定长度的字符数组,没有任何特殊终止。


推荐阅读