The best way is to always save data in your database in the same format ... upper or lower ... then create an index on your field classicaly ... CREATE INDEX ix_name ON mytable(name); SELECT name FROM mytable WHERE name = '" . strtolower($Name) ."'; You will ever use the index ... and it's simple to implement ... You can also easily do an update of your database like : update mytable set name=lower(name); to get all the old data in the good format ... Do not forget to vacuum the table after that ! Regards, Le Mardi 22 Octobre 2002 10:12, Andrew McMillan a écrit : > On Tue, 2002-10-22 at 17:01, Zhidian Du wrote: > > I want a PHP program to search case-insensitivly. > > > > for example: > > select Name from mytable where Name = '$Name'; > > > > > > Here $Name is what users' input maybe JOHN, john. How to let it match > > John in table and find that record? > > Although you can simply do as another poster said and use the ILIKE > operator, there are a few things you may want to consider. > > You can also do something like: > > "SELECT name FROM mytable WHERE lower(name) = '" . strtolower($Name) . > "'; " > > This means that PostgreSQL will use an index, if there is an index on > lower(name): > > CREATE INDEX lcname ON mytable( lower(name) ); > > This will give you the most efficient access if you have many records in > 'mytable', whereas ILIKE will require a full-table scan. > > Regards, > Andrew. -- Hervé Piedvache Elma Ingénierie Informatique 6 rue du Faubourg Saint-Honoré F-75008 - Paris - France Tel. 33-144949901 Fax. 33-144949902