Hi,
Ingo Strüwing wrote:
...
>> + s_stream << "WHERE LOWER(routine_schema) = LOWER('" << db_name
> << "') AND ";
>> + else
>> + s_stream << "WHERE routine_schema COLLATE utf8_bin = '" <<
> db_name << "' AND ";
>> + s_stream << "routine_type = 'PROCEDURE'";
>
>
> 3) I wonder if COLLATE utf8_bin could be useful even after LOWER()?
> Or do we even have a collation that is case insensitive?
> Or isn't comparison case insensitive by default (utf8_general_ci), and
> COLLATE utf8_bin broke that? Won't removal of COLLATE utf8_bin be all
> what is needed to fix the problem? OTOH, utf8_general_ci would compare
> 'a', 'A', 'À', and 'á' as equal, which might have been the reason for
> using utf8_bin in the first place. But then it would make sense after
> LOWER() too.
I introduced explicit utf8_bin collation to make comparisons case sensitive.
This was needed to fix some issue (don't remember the bug# at the moment). I
think it is needed for case sensitive platforms like unix. Without it,
si_objects incorrectly identifies different objects whose names differs in
case only. For lctn=1 case comparison works fine even with utf8_bin, because
then names are transformed to lc before comparison (we use "canonical" names).
It is worrying that 'a' and accented 'a' can be identified. I wonder if
LOWER() would do that. If yes, I'd say we still have error in this WHERE
clause...
> Would be nice to have a test for these subtle differences.
> Applies to the other two functions too.
>
Yes, good idea. Maybe I'll try to formulate WL for this.
Rafal