Задать вопрос
dima117
@dima117
Разработчик интерфейсов

Почему Firebird не генерирует исключение?

Добрый день!


Выполняю указанную ниже последовательность запросов к Firebird, все выполняется нормально, хотя, имхо, должна выдаваться ошибка.

ALTER TABLE &quot;TestTable&quot; ADD &quot;TestStringColumn&quot; VARCHAR(7) CHARACTER SET UNICODE_FSS<br/>
<br/>
INSERT INTO &quot;TestTable&quot; (&quot;ID&quot;,&quot;TestStringColumn&quot;) VALUES ('6','1234567890')<br/>


Т.е. создаем строковое поле из 7 символов и вставляем туда текст из 10 символов. Остальные СУБД, на которых пробовал сделать аналогичные действия (MSSQL, Oracle, MySQL, PostgreSQL), выдают ошибку.


Может быть, кто-нибудь знает, в чем причина?
  • Вопрос задан
  • 2780 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
Gluttton
@Gluttton
1. Попробуйте ввести 22 цифры;
2. Попробуйте ввести 21 цифру;
3. Попробуйте ввести Хабрахабр;
4. Попробуйте ввести Хабраха;
5. Прочитайте это: www.ibase.ru/devinfo/ib_unicode.htm.

Спасибо за хороший вопрос я и сам раньше этого не знал :)!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
alexmuz
@alexmuz
MySQL тоже не всегда выдает ошибку.
Пример:
CREATE TABLE `test` (
`id` INT NOT NULL,
`name` VARCHAR( 7 ) NOT NULL,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM;
Запрос:
INSERT INTO test (id, name) VALUES ('6','1234567890');
Есть такой параметр, как sql_mode, который отвечает за совместимость.
Если он выставлен в STRICT_TRANS_TABLES, то тогда вы получите ошибку:
#1406 — Data too long for column 'name' at row 1
А если он пустой или ANSI, то запрос успешно выполнится и просто молча обрежутся данные.

Подозреваю что подобный параметр есть и в Firebird.
Ответ написан
@Monca
Как вы понимаете, что нет ошибки? Может ваш драйвер сбоит. Не указана версия сервера.
И лучшее место для таких вопросов — sql.ru
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы