On 08/17/2017 07:07 AM, Jens Alfke wrote:
On Aug 16, 2017, at 4:55 PM, Richard Hipp <[email protected]> wrote:

Remember:  COLLATE binds more tightly than ==.  So

     'xyz' = 'XYZ' COLLATE nocase

gets parsed out as

    'xyz' = ('XYZ' COLLATE nocase)

And that expression has a different meaning from your

   ('xyz' = 'XYZ') COLLATE nocase
Oh, so collation is actually an attribute of a string value, that gets applied 
during comparisons involving that value? That’s very different from my mental 
model!

In that case, what is the meaning of
        ('foo' COLLATE binary) = ('FOO' COLLATE nocase)
i.e. which of the two competing collations does the = operator decide to use?

And is the collation attribute passed around with the string value, through 
intervening expressions? I.e. is this expression true?
        'FOO' = ifnull(null, 'foo' COLLATE nocase)

"binary" and "yes". Full rules explained here:

  https://sqlite.org/datatype3.html#collating_sequences

Dan.



_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to