I would try storing the SHA1() result as a hexadecimal string. Adolfo
> -----Original Message----- > From: Benjamin Pflugmann [mailto:[EMAIL PROTECTED]] > Sent: Sunday, December 29, 2002 7:35 AM > To: Philip Mak > Cc: [EMAIL PROTECTED] > Subject: Re: Storing a SHA1 checksum > > > On Sun 2002-12-29 at 05:28:57 -0500, [EMAIL PROTECTED] wrote: > > sql, table > > > > I'm storing a SHA1 checksum as "varchar(20) binary" in my > application. > > > > After running a test, it seems MySQL will strip trailing > spaces from a > > varchar column, even if it is binary! > > Yes, the BINARY keyword only influences how comparisons are > done (mainly case-sensivity, but also umlauts, etc...). > > Stripping space from VARCHAR is a known deficiency: > > http://www.mysql.com/doc/en/Bugs.html > > It also mentions, that the TEXT/BLOB types are save from it. > > > That means if the last character of my SHA1 checksum > happens to be a > > space, MySQL will corrupt it. > > > > What should I do? It seems I can: > > > > 1. Use blob instead of varchar. > > Problem: blob type is slower. > > Is that really a problem? Did you measure it? If so, I would > be intersted in the results. > > Advantage: Other application programmers do not need to be aware > of the hack. After MySQL is fixed, the source doesn't contain > redundant code. > > > 2. Make my application pad the checksum out to 20 spaces. > > Problem: Increases my code complexity a bit. > Advantage: Doesn't affect performance (noticeably). The DBA > doesn't need to be aware of the hack. > > > 3. Wait for MySQL to fix the strip trailing spaces bug. > > Problem: That doesn't provide an immediate solution. > > 4. Append a non-space at the end, and ignore it on retrieval > Problem: Same as 2. > Although 2. looks like the prettier solution, 4. makes easier to > spot the problem, if the additional handling is forgotten in new > code. > > Well, what you should do? It depends on what you need. It's a > trade-off and no one except you can answer what your priorities are. > > If, for example, you have many applications / programmers who > access this stuff, 1. is least intrusive. OTOH, if it is used > only in one place, perhaps in a well-encapsulated object, 2. > is the least intrusive change. And someone (that includes > yourself in 1 year) looking at your SQL dump wouldn't know > why you have chosen a BLOB, while you can have a neat comment > in the source about it. > > Since any of the solutions involves only minor changes, I > would not bother to waste time on the decision. Simply go > with one and rewrite if it really turns out to become a > problem later (which I don't believe). > > HTH, > > Benjamin. > > -- > [EMAIL PROTECTED] > > --------------------------------------------------------------------- > Before posting, please check: > http://www.mysql.com/manual.php (the manual) > http://lists.mysql.com/ (the list archive) > > To request this thread, e-mail <[EMAIL PROTECTED]> > To unsubscribe, e-mail > <[EMAIL PROTECTED]> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php > > > > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php