Обсуждение: AW: Truncation of char, varchar types
> Excessively long values are currently silently truncated when they are > inserted into char or varchar fields. This makes the entire notion of > specifying a length limit for these types kind of useless, IMO. Needless > to say, it's also not in compliance with SQL. To quote Tom "paragraph and verse please" :-) > How do people feel about changing this to raise an error in this > situation? Can't do. > Does anybody rely on silent truncation? Yes, iirc the only thing you are allowed to do is issue a warning, but the truncation is allowed and must succeed. (checked in Informix and Oracle) The appropriate SQLSTATE is: "01004" String data, right truncation note that class 01 is a "success with warning". Andreas
Zeugswetter Andreas SB writes:
> > Excessively long values are currently silently truncated when they are
> > inserted into char or varchar fields. This makes the entire notion of
> > specifying a length limit for these types kind of useless, IMO. Needless
> > to say, it's also not in compliance with SQL.
>
> To quote Tom "paragraph and verse please" :-)
SQL 1992, 9.2 GR 3 e)
"""
If the data type of T is variable-length character string and
the length in characters M of V is greater than the maximum
length in characters L of T, then,
Case:
i) If the rightmost M-L characters of V are all <space>s, then the value of T is set to the first L characters of V
and the length in characters of T is set to L.
ii) If one or more of the rightmost M-L characters of V are not <space>s, then an exception condition is raised: data
^^^^^^^^^ exception-string data, right truncation.
"""
Similarly in SQL 1999 and for other data types.
> > How do people feel about changing this to raise an error in this
> > situation?
>
> Can't do.
Why not?
--
Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/
Zeugswetter Andreas SB wrote: > Yes, iirc the only thing you are allowed to do is issue a warning, > but the truncation is allowed and must succeed. > (checked in Informix and Oracle) ? As much as I remember, Oracle raises an error. But it's been a few years since I last touched it, so maybe I'm wrong. -- Alessio F. Bragadini alessio@albourne.com APL Financial Services http://village.albourne.com Nicosia, Cyprus phone: +357-2-755750 "It is more complicated than you think" -- The Eighth Networking Truth from RFC 1925