A perfect hash is one to one and onto. md5 has been demonstrated to not be one-to-one, and therefore not perfect.
Also, depending on implementation, md5 hash may be used to construct the uuid. In reality, the likelihood of colliding uuid is probably about the same as colliding md5 (very small). But don't quote me on that, I'd hate to have to provide empirical evidence. Sorry for being pedantic and for continuing down this double off-topic rabbit hole. ; > On Mon, Jun 2, 2008 at 11:14 PM, William Conlon <[EMAIL PROTECTED]> wrote: > Yes. A HASH is NOT one-to-one and ONTO; it's merely one-way. > The likelihood of a Hash collision may be small, but it's not zero. > > On Jun 2, 2008, at 10:09 PM, Ben Johansen wrote: > > Wait a second! > are you saying that if i have an auto increment uid field that will have a > constant changing value, that md5 is going to produce duplicates? > > Ben > > On Jun 2, 2008, at 10:04 PM, William Conlon wrote: > > Is there a point to this exercise? > > the autoincrement record_uid == last_insert_id is unique. > MD5(last_insert_id()) is: > 1) not unique -- there can be a hash collision > 2) subject to replay attack > > > If the point is to convert the record_uid so you can expose it in a web > app, why not use ENCODE/DECODE on (record_uid)? > > > > --bill > > > On Jun 2, 2008, at 9:43 PM, Robert Garcia wrote: > > Just thinking.... > I know that last_insert_id() is SESSION specific. So it only applies to the > session of a connection. Could there be another function, that gets the last > insert id, with a global scope? I know MSSQL has this, in session, and > global scope. I also saw this somewhere: > > If you want store the last id for use in multiple insert statements: > > create table person ( > id bigint not null primary key auto_increment, > name char(100) not null > ); > insert into person set name = 'Joe'; > select @id:=id as id from class where id = last_insert_id(); > insert into some_other_table set person_id = @class_id; > insert into yet_another_table set person_id = @class_id; > > -- > > Robert Garcia > President - BigHead Technology > VP Application Development - eventpix.com > 13653 West Park Dr > Magalia, Ca 95954 > ph: 530.645.4040 x222 fax: 530.645.4040 > [EMAIL PROTECTED] - [EMAIL PROTECTED] > http://bighead.net/ - http://eventpix.com/ > > On Jun 2, 2008, at 7:49 PM, Ben Johansen wrote: > > this one was interesting, > > at first look you would think you could do > > -on before insert trigger > begin > set NEW.record_uid_hash = MD5(NEW.record_uid); > end > > and in fact I was able to get that trigger to save, but each run yielded > the same hash value. > so apparently it was hashing an empty value, because the auto-increment > values is not in the NEW yet > > also under navicat I found that if you get an error (trigger not defined) > when defining a trigger all the info will remain on the screen, but the > trigger will be gone for that edit session you have to copy the trigger > content into the buffer and then close and then restart the trigger define > process. > > That said, I found that I tried LAST_INSERT_ID() > > -on before insert trigger > begin > declare vHashValue varchar(60); > set vHashValue = md5(convert(LAST_INSERT_ID(),CHAR)); > set NEW.record_uid_hash = vHashValue; > end > > but the LAST_INSERT_ID() i just that the last successful insert into table > with autoincrement > so this proved fruitless, and in looking thru the docs there is apparently > now way in a function to get the next auto increment value. > > so in looking at what is needed and that is just unique md5 hash to be used > as a cross-reference to the row id and needing to be unique > I came up with this. > > -on before insert trigger > begin > set NEW.record_uid_hash = MD5(UUID()); > end > > doing the md5 on uuid takes the big uuid down to a smaller 32 char md5 > > Ben > > > On Jun 2, 2008, at 4:18 PM, Dan Stein wrote: > > I am new to using MYSQL usually use MSSQL. > I have a table called record > > pk is record_uid (auto increments) > > there is a column called record_uid_hash > > this is a MD5 of record_uid > > I want to create a trigger so when a new record is created the MD5 of the > record_uid is entered into the row. > > MD5(record_uid) > > I can't seem to get the syntax correct. > > I use NAVACAT to admin the DB I am getting a message saying no such > trigger. > > Any help would be appreciated. > > Dan > > -- > Dan Stein > FileMaker 7 Certified Developer > Digital Software Solutions > 799 Evergreen Circle > Telford PA 18969 > Land: 215-799-0192 > Cell: 610-256-2843 > FMP, WiTango, EDI,SQL 2000, MySQL, PHP > [EMAIL PROTECTED] > www.dss-db.com > > "The love of one's country is a splendid thing. But why should love stop at > the border? " > > Pablo Casals > > > > > ________________________________________________________________________ > TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf > > > ________________________________________________________________________ > TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf > > > ________________________________________________________________________ > TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf > > > ________________________________________________________________________ > TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf > > > ________________________________________________________________________ > TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf > > > ________________________________________________________________________ > TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf > > ________________________________________________________________________ TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf
