Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обрезаются строки при вставке в базу 
V
    Опции темы
infarch
Дата 17.7.2012, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Наткнулся на странную проблему. Есть база данных SQL Server, есть сайт который с ней работает. Сайт в продукции пол убунтой, разработка идет под виндой. 
Вставляю данные в базу. Если составить запрос который включает в себя данные то все нормально:

Код

insert into [mytable] ([name]) values ('lorem ipsum ...')


Так все нормально работает. Теперь делаю по человечески, через плейсхолдеры:

Код

insert into [mytable] ([name]) values (?)


Код

my $sth = $dbh->prepare($sql);
$sth->execute('lorem ipsum ...');


В таком варианте текст обрезается! В базу вставляются только первые 80 символов.

Не подскажет ли кто, куда копать и как чинить?

Под виндой использую DBD::ODBC, под убунтой - Sybase и  FreeTDS драйвер.


PM MAIL   Вверх
Bulat
Дата 18.7.2012, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Во-первых было бы здорово посмотреть структуру самой таблицы, и конкретно этого поля, куда идет вставка.


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
infarch
Дата 18.7.2012, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Ну вот например:

Код

USE [Byggeweb]
GO

/****** Object:  Table [dbo].[RequestLog]    Script Date: 07/18/2012 09:21:00 ******/

CREATE TABLE [dbo].[RequestLog](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ServerID] [varchar](50) NULL,
    [ClientIP] [varchar](100) NULL,
    [Controller] [varchar](100) NULL,
    [DateTime] [datetime] NULL,
    [TimeStart] [decimal](18, 6) NULL,
    [TimeFinish] [decimal](18, 6) NULL,
    [DT] [decimal](18, 6) NULL,
    [SessionID] [varchar](150) NULL,
    [Cmd] [varchar](100) NULL,
    [Params] [text] NULL,
 CONSTRAINT [PK_RequestLog] PRIMARY KEY NONCLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]




Поле Params режется.
PM MAIL   Вверх
Bulat
Дата 18.7.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



infarch, попробуй вставить текст, через функцию bind_param, с явным указанием типа вставляемой переменной. 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
infarch
Дата 18.7.2012, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Спасибо за подсказку, обязательно попробую. Только вот нашел я любопытную информацию вот тут: http://search.cpan.org/~mewp/DBD-Sybase-1.14/Sybase.pm

IMAGE and TEXT datatypes can not be passed as parameters using ?-style placeholders, and placeholders can't refer to IMAGE or TEXT columns (this is a limitation of the TDS protocol used by Sybase, not a DBD::Sybase limitation.)

Так что начинаю думать что нужно последовать рекомендациям микрософта - переходить с текст на varchar(max). Может так заработает...
PM MAIL   Вверх
Bulat
Дата 19.7.2012, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



infarch, 

 а еще абзацем выше - как раз почти то, что я тебе предлагал.

Цитата

DBD::Sybase can store and retrieve IMAGE or TEXT data (aka "blob" data) via standard SQL statements. The LongReadLen handle attribute controls the maximum size of IMAGE or TEXT data being returned for each data element.

When using standard SQL the default for IMAGE data is to be converted to a hex string, but you can use the syb_binary_images handle attribute to change this behaviour. Alternatively you can use something like

    $binary = pack("H*", $hex_string);

to do the conversion.


Я с Sybase не работал, но как правило проблемы подобного рода либо в некорректном привидении типов, либо на уровне баг в самих драйверах


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tishaishii
Дата 22.7.2012, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Код

insert into ... ( ... ) values( ... , cast( ? as text ) )

PM MAIL ICQ Skype   Вверх
infarch
Дата 22.7.2012, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Попробовал все ваши варианты, ничего не сработало. Как резалось так и осталось. Я еще заметил что резался не только text, но и varchar - вставлялось первые 80 символов. Однако проблему таки решил, обновив DBI::Sybase и FreeTDS до последних версий. Все заработало ) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.