DBI, BLOBS, MySQL
Tim Sweetman
ti at lemonia.org
Sat Jan 10 13:26:36 GMT 2009
On 9 Jan 2009, at 09:00, Richard Huxton wrote:
> Paul Makepeace wrote:
>> What does 'show table files;' give you? You might have the wrong type
>> of blob/text.
>>
>> http://dev.mysql.com/doc/refman/5.0/en/blob.html
>
> "If a TEXT column is indexed, index entry comparisons are space-padded
> at the end. This means that, if the index requires unique values,
> duplicate-key errors will occur for values that differ only in the
> number of trailing spaces. For example, if a table contains 'a', an
> attempt to store 'a ' causes a duplicate-key error"
>
> Genius. True genius.
Isn't this generally true for VARCHAR fields? Certainly MySQL does
that, and so does Informix, and I think Oracle does, too. If you're
storing human-readable strings, storing trailing spaces tends to be
more of a cause of bugs than a feature (though, if you're thinking
along those lines, you'd probably want out-of-the-box indexed
matching that neglects punctuation, or at the very least, which is
case insensitive, which MySQL, unusually, does by default).
Or sorting that suits humans[1].
(More concerningly, I seem to recall that if you tell MySQL to index
a TEXT field, the portion it indexes is only the first ~255 bytes).
Moreover, BLOBs in databases appear to be something that was the
feature du jour in about 199x, and all the database vendors promptly
built in some sort of BLOB support. However, hardly any of them work
very well, and the general advice about using blobs seems to be
"don't", for most cases, or at least "use with extreme caution". I've
seen them used to store various serialised data structures, which
works no better than the serialisation mechanism does, with the added
risk of hitting MySQL's hard limit on size (when it silently
truncates for you).
tim
[1] http://www.codinghorror.com/blog/archives/001018.html
More information about the london.pm
mailing list