我有一个Informix 11.70数据库。我无法在表上成功执行此insert语句。
INSERT INTO some_table(
col1,
col2,
text_col,
col3)
VALUES(
5,
50,
CAST('"id","title1","title2"
"row1","some data","some other data"
"row2","some data","some other"' AS TEXT),
3);
我收到的错误是:
[错误代码:-9634,SQL状态:IX000]没有从char转换为文本。
我发现我应该添加这个语句以允许在文本文字中使用新行,所以我在上面写的同一个查询中添加了这个:
EXECUTE PROCEDURE IFX_ALLOW_NEWLINE('t');
仍然,我收到同样的错误。
我还阅读了IBM文档,其中说:或者允许换行,我可以在ALLOW_NEWLINE
文件中设置ONCONFIG
参数。我想最后一个需要管理员访问服务器来改变我没有的配置文件,我不想利用这个设置。
答案 0 :(得分:3)
Informix的TEXT(和BYTE)列可以预先标出任何标准,并且在很多方面都是非常特殊的类型。 Informix中的TEXT与其他DBMS中的TEXT非常不同。其中一个长期存在(超过20年)的问题是,没有可用于将数据插入其中的字符串文字符号。 “从字符到文本的无法转换”表示没有从字符串文字到TEXT的显式转换。
您有多种选择:
loc_t
。FILETOCLOB()
函数从客户端上的文件获取信息到数据库(和LOTOFILE
将信息从数据库传输到客户端上的文件。如果你可以使用LVARCHAR,那是迄今为止最简单的替代方案。
答案 1 :(得分:0)
我忘了提问题中的一个重要细节 - 我使用Java和Hibernate ORM来访问我的Informix数据库,因此Jonathan Leffler's answer中的一些建议方法(特别是loc_t
处理)遗憾的是不适用。此外,我需要存储动态长度的大数据,我担心LVARCHAR
列不足以容纳它。
我开始工作的方式是遵循Michał Niklas的建议from his comment,然后使用PreparedStatement
。这可能是Informix以自己的方式处理TEXT
数据类型的原因。