[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вставка строки длиннее 255 в поле varchar
guest
В БД тип данных поля varchar(255).
Что будет если на вставку в поле, в запрос пойдет строка большей длины?
1) Урежется до 255 и вставится
2) Получу ошибку и ничего не вставится

Хотелось бы 1-й вариант. Это возоможно?
T1grOK
Первый вариант

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
guest
Т.е. при вставке данных в таблицу достаточно лишь на фронтенде в валидаторе формы ограничить максимальный набор знаков (для информативности), а в серверной части сразу вставлять в БД? Если количество знаков превысится - обрезка...
inpost
частично. Если много - обрежет, если слишком много - ошибка.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Invis1ble
guest
а проверить? неужели дольше, чем создать тему и ждать ответов?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Nikitian
Первый вариант в конфигурации по умолчанию. Второй вариант при использовании strict mode.
Очень рекомендую включить strict mode и разрабатывать только так - избавит от множества логических ошибок.
Включение strict mode в конфиге мускуля

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE';

Подробнее: http://habrahabr.ru/post/116922/
guest
Спасибо за ответы. Что-то подобное информации из последнего ответа искал.
inpost
Nikitian
то есть ты хочешь сказать, что при запросе в дефолтной установке ты отправишь запрос размером в 50mb, а поле varchar само урежет? Верно я понял твою мысль?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Nikitian
inpost, мы здесь все немного предсказамусы, т.к. даётся только часть информации, а остальное домысливается. В подавляющем большинстве случаев всё будет именно так, как я описал. Разумеется, если размер запроса выйдет за пределы max_allowed_packet, то мускуль так же плюнет ошибкой, но <predskazamus mode on>, подозреваю,</predskazamus mode off> ТС имел ввиду не этот случай. Опять же, при 50 метрах данных для вставки скорее пых ещё на этапе формирования запроса плюнет ошибкой о превышении дефолтных же 32M memory_limit. А мускуль в этом случае ошибки не выдаст, т.к. до него просто не дойдёт очередь wink.gif
inpost
Nikitian
Ну как, фраза чёткая: "а в серверной части сразу вставлять в БД? ". То есть сразу я возьму и отправлю те 50мб данных на серверную часть, полезет ошибка мускула.
Отсюда и был вопрос: "обрежет или ошибка".
И мой ответ:
1) до определённой длины - обережет.
2) слишком длинное - ошибка.

К тому же 50мб я говорил образно, можно и 30мб отправлять, чтобы уложиться в дефолт по лимиту памяти, или даже 2мб по дефолту входящих данных из формы. Даже 2мб запрос должен выдать ошибку.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Nikitian
inpost
Даже 30 мегабайт строка с трудом влезет в 32M лимит памяти только если ничего другого в память не помещать. Как минимум, при вставке строки в sql, память переполнится. А скорее ещё раньше, ведь скрипт задолго до вставки может память засрать своей работой.
Какую ошибку выдаст попытка вставки записи с длиной значения поля в 2 мегабайта?

<?php
$str = str_repeat('q',1024*1024*2);
echo memory_get_peak_usage (true).'<br />';
$m = mysqli_connect('localhost','root','','test');
mysqli_query($m,"insert into `test` set `field`='$str'");
echo memory_get_peak_usage (true).'<br />';
echo mysqli_error($m);

Кстати, max_allowed_packet по умолчанию вообще 1M.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.