Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 7 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 10.12.2003
Откуда: Харьков
Как уговорить FreeDTS отдавать в датасете в php больше чем по 255 символов в ячейку датасета?
Бо как понимаете протащить varchar 8000 сабстрингами - это высшее посвящение йогов :-)
FreeBSD 5.2, Apache/1.3.28, PHP/4.3.6



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
а что не проходит больше чем 255?
У меня правда под Windows это дело стоит, но насколько я знаю проблем там с этим нет. Но япроверю.


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
Откуда: Харьков
Для любителей позадовать много вопросов не зная с каой стороны зайти, сразу скажу, что установлено на соединение
Код:
SET TEXTSIZE 8000

В QueryAnalyzer отдаёт столько, сколько надо, из чего посмею сделать вывод о том, что это именно проблема DTS

Добавлено спустя 2 минуты, 31 секунду:
Да не, под виндой у меня тоже проблем нет. У тебя же оригинальный под виндой клиент майкрософта стоит, а я фришную бяку бзаю, к томуже совместимую с SyBase


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Vinni
Я не вопросы задаю, а пытаюсь выснить суть :), так как я на php пишу очень давно и также очень давно использую MS-SQL , мне это дело интересно.
Цитата:
Да не, под виндой у меня тоже проблем нет. У тебя же оригинальный под виндой клиент майкрософта стоит, а я фришную бяку бзаю,

А как под FreeBsd идет обращение с MSSQL, через какие билиотеки? Фришка у меня вроде тоже стоит, сейчас не помню. Но если клиента нет, то видимо модуль для php , как раз и делает все сам. Кстати а под Windows он сам все не делает?
Сейчас попробую через фришку

Добавлено спустя 14 минут, 43 секунды:
Текс, вот те на. Тест под Windows.
Цитата:
<?
$ms=mssql_connect("localhost","sa","_____");
mssql_select_db("just");
$res=mssql_query("select * from mytable");
while ($row=mssql_fetch_array($res)) {
echo strlen($row[0])."<br>".$row[0]."<hr>";
}
mssql_free_result($res);
mssql_close($ms);
?>

Таблица mytable имеет одно поле размером varchar(1000);
результат возвращает только 255 :(

Добавлено спустя 2 минуты, 34 секунды:
Забыл добавить это было под Windows. А вот потом добавил поле типа text, с ним работает без проблем. Возращает имеено такого размера строку как надо.

Добавлено спустя 29 минут, 14 секунд:
кхм, а как скомпилить php под фришку с поодержкой MS-SQL??? Тот модуль что с ним идет пашет только под Windows. Как я ни пытался перекомпилить php
./configure --with-mssql
результата никакого :(

Добавлено спустя 1 минуту, 40 секунд:
тьфу вот я торможу после работы, тут же про FreeDTS речь идет!

Добавлено спустя 44 минуты, 5 секунд:
Ну вот, скачал FreeTDS , скомпилил и протестил.
Если поле varchar то максимально этот гад дает только 255, а вот при применении типа поля как text
FreeTDS прекрасно возращается всю длину строки!
Код:
rayunix# tsql -H 192.168.239.1 -p 1433 -U sa
locale is "C"
locale charset is "US-ASCII"
Password:
1> use just
2> go
1> select * from mytable
2> go
var1    var2
1234567890123456789012345678
NULL

NULL   
123456789012345678....... 300 bytes line 1

NULL   
1234567890123456789...... 300 bytes line 2

Вот, первая переменнач varchar(1000) но FreeDTS вернул только 255, var2 тип text, и вернул все что было там 300 букв и в конце надпись 300 bytes line 1 Я укоротил вывод, чтобы тут лишнее не выводить.
И так выход один наверное , использовать только text если надо передавать большие куски текста.


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
Откуда: Харьков
Спасибо Ray Adams.
Не обижайся, я просто хотел "умников отсечь", которые любят на любой вопрос уточнить какого цвета у меня коврик от мышки.

Вот смори какая зависимость получается. Допустим поле в varbinary(8000). Кладу я туда обычно гдето в чаровом эквиваленте 1000, т.е. в binary в 2 раза больше ~2000
Так вот, если выводить это поле как есть , т.е. в varbinary - то в php получаю 510 для binary, а для его-же , тока через CAST (varbinary_field as varchar(300)) - соответственно 255.
Но идейку с текстом ты ничё родил!
Конечно поле TEXT не решает самой проблемы, но это способ. Я попробовал - получилось - так:
CAST(CAST(varbinary_field as varchar(8000)) as text)
:beer:
Но однако это трудно не назвать через сраку, извиняюсь.

А хранить я по другому не всегда могу, ибо зачастую а тока читаю, например сорцы ментаданных (триггера, хранимые процедуры и другая дрянь) из системных каталогов. Спасибо ещё раз!


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Цитата:
Но однако это трудно не назвать через сраку, извиняюсь.

Ну для меня такое не вновинку, сколько моментов при работе с SQL приходится делать через одно место :) Сам ежедневно с этим вожусь .


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
Откуда: Харьков
Отож. Хорошая штука, но слишком много вещей в нём неочевидны. Сколько раз я кричал после пол-дня головоломания:
- О б...! Кто бы мог догадаться!
Я уже плачу по mysql :-)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 7 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan