SuSE下通过unixODBC在Lotus Notes代理读写MariaDB LONGTEXT报错咨询
解决方案
根因说明
该报错由LotusScript LS:DO组件对大文本类型的默认处理限制,与SuSE Linux环境下MariaDB ODBC驱动的大字段传输配置不匹配导致:select *加载LONGTEXT列时,LS:DO默认的GetValue方法不支持直接读取超过长度限制的大文本,就会抛出"LS:DO- The result contains no data"错误。
修复步骤
第一步:调整ODBC与MariaDB服务端配置
在SuSE Linux的ODBC配置文件(全局路径/etc/odbc.ini、用户级路径~/.odbc.ini)中,对应你的MariaDB数据源节点添加以下参数:
同时修改MariaDB服务端配置NO_CACHE=1 MAX_ALLOWED_PACKET=64M/etc/my.cnf.d/mariadb-server.cnf,确保max_allowed_packet参数值不小于ODBC端配置,避免大文本传输时被截断。修改后重启MariaDB服务生效。第二步:修改LotusScript大字段读取逻辑
不要直接调用GetValue读取LONGTEXT类型字段,改用LS:DO提供的GetChunk分块读取方法,示例代码如下:
如果你需要写入LONGTEXT字段,对应使用Dim chunkSize As Long, longTextContent As String, chunk As String chunkSize = 32767 ' 可根据实际场景调整,不超过LotusScript单字符串最大长度限制即可 ' 定位到结果集行后执行以下逻辑 Do chunk = result.GetChunk("你的LONGTEXT字段名", chunkSize) If Len(chunk) = 0 Then Exit Do longTextContent = longTextContent & chunk Loop ' 后续直接使用拼接完成的longTextContent即可AppendChunk方法拼接大文本后写入即可。第三步:优化SQL与结果集配置
- 避免使用
select *写法,显式指定所有需要查询的字段,包括LONGTEXT类型字段 - 初始化ODBCResultSet时关闭缓存限制,示例代码:
Dim con As New ODBCConnection Dim qry As New ODBCQuery Dim result As New ODBCResultSet Call con.ConnectTo("你的ODBC数据源名称", "数据库账号", "数据库密码") Set qry.Connection = con qry.SQL = "select id, ticket_title, ticket_content /* ticket_content为LONGTEXT字段 */ from ticket where ..." Set result.Query = qry result.CacheLimit = 0 ' 关闭结果集缓存限制,适配大字段读取 Call result.Execute()- 避免使用
验证方法
所有配置修改完成后,重启Domino服务释放旧的ODBC连接池,先测试读取短内容的LONGTEXT字段,再逐步测试最大长度的字段内容,确认无报错即可。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

