On Sep 2, 2013, at 12:46 PM, Hassan Schroeder <[email protected]> wrote:
> TIL: The SQL-92 spec dictates that CHAR/VARCHAR comparisons > be made after padding each string with spaces to the same length. > > That means that using a standard MySQL collation, the two strings > 'foo' and 'foo ' are equal. > > (ref: https://mariadb.com/kb/en/22-sql-collations-collation/) > > The problem (which just bit me after all these years) is essentially: > >> query_name = 'foo' >> Thing.create(:name => 'foo ') >> thing = Thing.where(:name => query_name).first # returns created thing >> thing.name == query_name # => false ## ouch > > That result seems to violate the POLS to me, but I'd like to hear any > opinions about if and/or where this behavior should be fixed before I > start working on a patch to the MySQL2 gem :-) Given that is how the SQL specification works, the MySQL2 adapter is working correctly. While I would consider the above extra space a surprise, certainly, I would consider it *more* of a surprise if the adapter returned anything *but* exactly what the dbms fed it. Going down the path of patching the driver to give something else is a slippery slope. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/536A1F01-4FDA-4B7F-9941-76049A994EC6%40gmail.com. For more options, visit https://groups.google.com/groups/opt_out.

