Прежде всего, вы действительно уверены, что хотите использовать тип Informix TEXT? Этот тип неудобен в использовании, отчасти из-за проблем, с которыми вы сталкиваетесь. Он предшествует чему-либо в любом стандарте SQL в отношении больших объектов (TEXT все еще отсутствует в SQL-2003 - хотя примерно эквивалентные структуры, CLOB и BLOB, есть). И функциональность BLTE и TEXT не изменилась с тех пор - о, скажем, в 1996 году, хотя я подозреваю, что есть возможность выбрать более раннюю дату, например 1991.
В частности, сколько данных вы планируете хранить в столбцах ТЕКСТ? Ваш пример показывает строку «вставить»; то есть, я полагаю, намного меньше, чем вы бы на самом деле использовали. Вы должны знать, что столбцы BYTE или TEXT используют 56-байтовый дескриптор в таблице плюс отдельную страницу (или набор страниц) для хранения фактических данных. Таким образом, для таких крошечных строк это пустая трата пространства и пропускной способности (поскольку данные для объектов BYTE или TEXT будут передаваться между клиентом и сервером отдельно от остальной части строки). Если ваш размер не превысит 32 КБ, вам следует использовать LVARCHAR вместо TEXT. Если вы будете использовать размеры данных выше этого, то БАЙТ, ТЕКСТ, БЛОБ или КЛОБ являются разумными альтернативами, но вам следует обратить внимание на настройку пространств BLOB-объектов (для BYTE или TEXT) или пространств интеллектуальных BLOB-объектов (для BLOB или CLOB). Вы можете и используете ТЕКСТ В ТАБЛИЦЕ, а не в пространстве больших двоичных объектов; Имейте в виду, что это влияет на ваши логические журналы, тогда как использование пространства больших двоичных объектов не оказывает на них никакого влияния.
Одной из функций, которую я проводил в течение десятилетия или около того, является возможность передавать строковые литералы в операторах SQL как литералы TEXT (или литералы BYTE). Это отчасти из-за опыта таких людей, как вы. Мне пока не удалось получить приоритет по сравнению с другими изменениями, которые необходимо внести. Конечно, вы должны знать, что максимальный размер оператора SQL составляет 64 КБ текста, поэтому вы можете создать слишком большой оператор SQL, если не будете осторожны; заполнители (вопросительные знаки) в SQL обычно предотвращают возникновение проблемы, а увеличение размера оператора SQL - это еще один запрос функции, за который я проводил кампанию, но чуть менее горячо.
ОК, при условии, что у вас есть веские причины для использования ТЕКСТА ... что дальше. Я не совсем понимаю, что делает Java (драйвер JDBC) за кулисами - не считая слишком многого - справедливо поспорить, что он замечает, что нужна структура TEXT 'locator' и отправляет параметр в правильном виде. формат. Похоже, что драйвер ODBC не балует вас подобными махинациями.
В ESQL / C, где я обычно работаю, код должен работать с BYTE и TEXT иначе, чем все остальное (а BLOB и CLOB должны снова обрабатываться по-разному). Но вы можете создать и заполнить структуру локатора (loc_t или ifx_loc_t из locator.h - которая может отсутствовать в каталоге ODBC; по умолчанию она находится в $ INFORMIXDIR / incl / esql) и передать ее в код ESQL / C в качестве переменная хоста для соответствующего заполнителя в операторе SQL. В принципе, для ODBC существует, вероятно, параллельный метод. Возможно, вам придется взглянуть на руководство по драйверу Informix ODBC, чтобы найти его.