MySQL поиск нечувствителен к регистру

У меня есть код, и он отвечает за поле поиска для поиска данных в таблице mysql. проблема заключается в его чувствительности к регистру, я посмотрел на сайт автора, и где-то они предлагают изменить с LIKE на ILIKE, однако это приводит к тому, что поиск не работает

/* 
 * Filtering
 * NOTE this does not match the built-in DataTables filtering which does it
 * word by word on any field. It's possible to do here, but concerned about efficiency
 * on very large tables, and MySQL's regex functionality is very limited
 */
$sWhere = "";
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
    $sWhere = "WHERE (";
    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {
        if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" )
        {
            $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
        }
    }
    $sWhere = substr_replace( $sWhere, "", -3 );
    $sWhere .= ')';
}

/* Individual column filtering */
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
    if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
    {
        if ( $sWhere == "" )
        {
            $sWhere = "WHERE ";
        }
        else
        {
            $sWhere .= " AND ";
        }
        $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
    }
}

person user1741397    schedule 20.09.2013    source источник
comment
Вы должны использовать PDO или MySQLi с подготовленными операторами вместо функций mysql_, они устарели.   -  person    schedule 20.09.2013
comment
stackoverflow.com/questions/2876789 /   -  person    schedule 20.09.2013
comment
Измените таблицу, чтобы использовать сортировку без учета регистра. Стандартные значения таблиц MySQL по умолчанию (и сравнение) нечувствительны к регистру. Чувствительность к регистру - это то, для чего вы специально настроили систему.   -  person Marc B    schedule 20.09.2013


Ответы (3)


Если у вас есть сортировка без учета регистра (которая обычно используется по умолчанию), то ваш поиск по умолчанию будет без учета регистра.

person Mike Brant    schedule 20.09.2013
comment
не уверен, что понимаю, что вы имеете в виду ... но, похоже, он чувствителен к регистру - person user1741397; 20.09.2013
comment
@ user1741397 Каковы текущие параметры сортировки для полей, по которым вы пытаетесь выполнить поиск? - person Mike Brant; 20.09.2013

Попробуйте:

/* 
 * Filtering
 * NOTE this does not match the built-in DataTables filtering which does it
 * word by word on any field. It's possible to do here, but concerned about efficiency
 * on very large tables, and MySQL's regex functionality is very limited
 */
$sWhere = "";
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
    $sWhere = "WHERE (";
    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {
        if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" )
        {
            $sWhere .= "UCASE(`".$aColumns[$i]."`) LIKE '%UCASE(".mysql_real_escape_string( $_GET['sSearch'] ).")%' OR ";
        }
    }
    $sWhere = substr_replace( $sWhere, "", -3 );
    $sWhere .= ')';
}

/* Individual column filtering */
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
    if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
    {
        if ( $sWhere == "" )
        {
            $sWhere = "WHERE ";
        }
        else
        {
            $sWhere .= " AND ";
        }
        $sWhere .= "UCASE(`".$aColumns[$i]."`) LIKE '%UCASE(".mysql_real_escape_string($_GET['sSearch_'.$i]).")%' ";
    }
}
person MB34    schedule 20.09.2013

person    schedule
comment
где я могу добавить верхнюю часть моего кода? этот код кажется мне слишком продвинутым: D - person user1741397; 20.09.2013