Re: Problems with hex data in VARBINARY fields?
Paul DuBois <[email protected]> Fri, 1 Apr 2005 18:10:47 -0600
| Newsgroups | gmane.comp.db.mysql.bugs |
|---|---|
| Message-ID | <p06210290be7393117641@[192.168.0.35]> |
At 16:59 -0700 4/1/05, Adam Wilson wrote: >OK.... so... >I'm having this problem where I'm trying to store (rather small >(36-byte)) hex values in MySQL, but some of them end up getting >truncated, therefore breaking my app... I'm using 4.1.10, with >--default-table-type=InnoDB... Or what ever option that is.... >anyway... point is, all of these tables are InnoDB... > >Here's the problem...... > >-------------------------------------------------------------------------------------------------------------------------------- > >mysql> CREATE TABLE `table` (`field` VARBINARY(36) DEFAULT NULL); >Query OK, 0 rows affected (0.01 sec) > >mysql> INSERT INTO `table` SET field = >0xdee96318a69c8ba3208e1b2e91233725f5bb99a4708df7ad367c7285041bbb17652a0f20; >Query OK, 1 row affected (0.00 sec) The final byte is 0x20, that is, space. As noted here, BINARY and VARBINARY have the same trailing space handling as CHAR and VARCHAR: http://dev.mysql.com/doc/mysql/en/binary-varbinary.html As as noted here, trailing spaces are trimmed before MySQL 5.0.3: http://dev.mysql.com/doc/mysql/en/char.html You could use a BLOB column instead or upgrade to MySQL 5.0.3. > >mysql> SELECT HEX(`field`) FROM `table` WHERE `field` = >0xdee96318a69c8ba3208e1b2e91233725f5bb99a4708df7ad367c7285041bbb17652a0f20; >Empty set (0.00 sec) > >mysql> SELECT HEX(`field`) FROM `table`; >+------------------------------------------------------------------------+ >| HEX(`field`) | >+------------------------------------------------------------------------+ >| DEE96318A69C8BA3208E1B2E91233725F5BB99A4708DF7AD367C7285041BBB17652A0F | >+------------------------------------------------------------------------+ >1 row in set (0.00 sec) > >mysql> SELECT HEX(`field`) FROM `table` WHERE `field` = >0xdee96318a69c8ba3208e1b2e91233725f5bb99a4708df7ad367c7285041bbb17652a0f; >+------------------------------------------------------------------------+ >| HEX(`field`) | >+------------------------------------------------------------------------+ >| DEE96318A69C8BA3208E1B2E91233725F5BB99A4708DF7AD367C7285041BBB17652A0F | >+------------------------------------------------------------------------+ >1 row in set (0.00 sec) > >-------------------------------------------------------------------------------------------------------------------------------- > >AND... to make things worse.... I have a unique index on the column, >so it breaks even more.... > >-------------------------------------------------------------------------------------------------------------------------------- > >mysql> CREATE UNIQUE INDEX `index` ON `table` (`field`); >Query OK, 1 row affected (0.02 sec) >Records: 1 Duplicates: 0 Warnings: 0 > >mysql> INSERT INTO `table` SET field = >0xdee96318a69c8ba3208e1b2e91233725f5bb99a4708df7ad367c7285041bbb17652a0f20; >ERROR 1062 (23000): Duplicate entry '??c???? ?#7%????p???6|r?e*' for key 1 > >-------------------------------------------------------------------------------------------------------------------------------- > >I'd appreciate any Ideas anyone has any ideas/suggestions... I'd hate >to unnecessarily submit a bug report, if it's something on my end..... > > >THANKS!!! > >--Adam > >-- >MySQL Bugs Mailing List >For list archives: http://lists.mysql.com/bugs >To unsubscribe: http://lists.mysql.com/[email protected] -- Paul DuBois, MySQL Documentation Team Madison, Wisconsin, USA MySQL AB, www.mysql.com -- MySQL Bugs Mailing List For list archives: http://lists.mysql.com/bugs To unsubscribe: http://lists.mysql.com/[email protected]