Я использую FreeTDS / ODBC для подключения к базе данных SQLServer2005 из CentOS7 с использованием PHP.Он работает хорошо, за исключением одного поля - большого текстового поля «заметка», которое усекается до 4096 символов.Как получить запрос PHP odbc_exec для извлечения всего текстового поля?
Я в процессе переноса базы данных из SQLServer2005 в SQLServer2016, но проблема с усечением текстового поля, похоже, одинакова для обоих.
Я попытался установить размер текста в самом запросе:
SET TEXTSIZE 2147483647; SELECT note FROM soap WHERE organizationId=41 and patientId=2019 AND noteId=189
Я протестировал вышеупомянутое соединение и запрос в isql с моими настройками odbc / freetds, и он, похоже, получает всетекстовое поле правильно.Вот часть вывода из моего файла freetds.log:
17:30:50.367355 29543 (token.c:1542):tds7_get_data_info:
colname = note
type = 35 (text)
server's type = 35 (text)
column_varint_size = 4
column_size = 2147483647 (2147483647 on server)
Я попытался установить размер текста в файле odbc.ini:
[ClaimsServiceNewTest]
Driver = /usr/lib64/libtdsodbc.so.0
Description = Advanced Billing Service Database (TESTING OLD SQL)
Trace = Yes
TraceFile =/tmp/sql.log
ForceTrace = Yes
SERVERNAME = ClaimsServiceNewTest
User = ********
Password = ********
Database = ********
Port = 1433
TDS_Version = 7.1
TextSize = 2147483647
Я также установил текстразмер в файле freetds.conf:
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 4294967295
Только когда я пытаюсь выполнить запрос в моем PHP-скрипте, он усекается.
Есть предложения?Я довольно новичок во всем этом, поэтому, пожалуйста, дайте мне знать, если я упускаю что-то очевидное.Я также заметил, что isql выводит TDSDUMP в мой файл freetds.log, но мои запросы PHP - нет - я не знаю, является ли это ожидаемым поведением, но если у вас есть предложения по выводу TDSDUMP из моих запросов PHP, я представляючто у него будет дополнительная полезная информация.
Спасибо за внимание!
РЕДАКТИРОВАТЬ: Одно замечательное предложение Mark Thomas состояло в том, чтобы изменить mssql.textlimit
и mssql.textsize
в php.ini.Я изменил это в файле php.ini (а также сделал это в скрипте с помощью: ini_set('mssql.textlimit', 10000000);
, но я не вижу, чтобы это имело значение (перезапуск apache после изменений в php.ini должен быть достаточным,верно?).