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.

Reply via email to