Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

How to fix this, as some time user make mistake. For example in matching data, or redundant data because of case sensitive.

Replies are listed 'Best First'.
Re: Case sensitive in MySQL
by trammell (Priest) on Jan 29, 2005 at 15:27 UTC
    This isn't really a Perl question, but I've encountered this class of problem before. To make MySQL columns case-sensitive, use the BINARY keyword, eg.:
    CREATE TABLE foo ( mystring CHAR(10) BINARY );
      I am amazed that you decyphered this. Hats off to you.
      Also of note is that you can use the BINARY keyword in your query without using a BINARY colunn. For example:
      SELECT 'abc' LIKE BINARY 'ABC';
Re: Case sensitive in MySQL
by Errto (Vicar) on Jan 29, 2005 at 18:09 UTC

    If your issue is that you are storing character data and want to do case-insensitive matching on it, then you need to make sure that the data you are comparing are all in the same case. If you are doing the conversion on the Perl side, use the functions lc and uc or, if you're doing it on the database side, use the standard SQL functions LOWER and UPPER.

    My experience is that you'll see vastly better performance if you store the data in all lowercase andor all uppercase, so that when you do the comparison against user data later, you don't need to call UPPER or LOWER on the actual data column, which will make the comparison much slower. This is a form of normalization.

    Update: Corrected tiredness-induced conjunction error.

      MySQL's docs do say say "By default, string comparisons are not case sensitive". I think it's unexpected but that's how it works. trammell noted that you have to use the BINARY keyword to enable case sensitivity in MySQL.

      I want to say that if you are going to explicitly lowercase (or uppercase) your strings for comparison then you should use the same function on each string. I mean use the MySQL LOWER() function on both strings.

      If you were to mix Perl's lc function with the database's LOWER function then you could have problems with say umlauts or something. It might work but it's just cleaner to use the same function on both strings.