Re: varchar error

Поиск
Список
Период
Сортировка
От Marco Colombo
Тема Re: varchar error
Дата
Msg-id 1119526147.24016.208.camel@Frodo.esi
обсуждение исходный текст
Ответ на varchar error  ("Raul Secan" <raul@zerosoft.ro>)
Список pgsql-php
On Thu, 2005-06-23 at 11:18 +0300, Raul Secan wrote:
> Hello, I just have this:
>
> CREATE TABLE test (
>     mytext varchar(5)
> ) WITHOUT OIDS;
>
> If I put a string with more than 5 chars in mytext, I receive an
> error, regarding the wrong lenght of the string.
>
> In MySQL I know that the string is automatically reduced to the number
> of char allowed by the column, even if I insert a longer string.
>
> I don't want to do this from PHP, and I was wandering how this can be
> done in PostreSQL? Maybe in CREATE TABLE definition?
>
> Cheers, Raul.

The job of the database is to accept valid data and to refuse invalid
ones, not to silently convert invalid data into a valid form.

While it is possible to do that conversion in PostgreSQL, I suggest you
either reconsider doing it in the application (the place it belongs to),
or think again about the schema (maybe storing the whole string).

BTW, you can also truncate the string at insert time, just change:

INSERT INTO test (mytext) VALUES ('alongstring');

into:

INSERT INTO test (mytext) VALUES (substring('alongstring' for 5));

Here it is, in action:
marco=# CREATE TABLE test (mytext varchar(5)) WITHOUT OIDS;
CREATE TABLE
marco=# INSERT INTO test (mytext) VALUES ('alongstring');
ERROR:  value too long for type character varying(5)
marco=# INSERT INTO test (mytext) VALUES (substring('alongstring' for 5));
INSERT 0 1
marco=# SELECT * FROM test;
 mytext
--------
 along
(1 row)

Of course, you have to do that on every UPDATE, too.

If that's what you want to achieve, I find it much more readable to do
the substring() or the PHP equivalent explicitly, rather than relying on
some implicit RULE or TRIGGER (or worse, on a database that silently
truncates it).

For sure I get puzzled when SELECT returns 'along' after I do INSERT
'alongstring'. Think about consistency.

.TM.
--
      ____/  ____/   /
     /      /       /                   Marco Colombo
    ___/  ___  /   /                  Technical Manager
   /          /   /                      ESI s.r.l.
 _____/ _____/  _/                      Colombo@ESI.it


В списке pgsql-php по дате отправления:

Предыдущее
От: Gnanavel Shanmugam
Дата:
Сообщение: Re: varchar error
Следующее
От: Bruno Wolff III
Дата:
Сообщение: Re: varchar error