How to add collate to laravel query

前端 未结 3 1089
没有蜡笔的小新
没有蜡笔的小新 2021-01-18 15:59

I need to run a query having collate utf8_bin like so:

SELECT * FROM `table` WHERE `field`=\'value\' collate utf8_bin;

This is

相关标签:
3条回答
  • 2021-01-18 16:08

    If you only need to apply this to the values in the WHERE clause:

    $value = "àBc123";
    $query->whereRaw('field_name COLLATE utf8mb4_bin = (?)', $value);
    
    • This query is both case sensitive and accent sensitive.
    • Replace utf8mb4_bin with whatever collation makes sense on your system (eg. utf8_bin).
    • Using (?) should utilize Laravel's query sanitization.

    For accent sensitive but NOT case sensitive:

    $value = "àBc123";
    $query->whereRaw('LOWER(field_name) COLLATE utf8mb4_bin = (?)', strtolower($value));
    
    0 讨论(0)
  • 2021-01-18 16:11

    You can do it this way if it solves your problem:

    SomeModel::whereField($value)->orderByRaw("name COLLATE utf8_bin ASC")->get();
    
    0 讨论(0)
  • 2021-01-18 16:30

    Since you can configure MySQL driver to use one:

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
    

    You can create a different connection for your particular query:

    'mysql-collation' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => '<your collation>',
        'prefix'    => '',
    ),
    

    And use that connection on your query:

    $users = DB::connection('mysql-collation')->select(...);
    

    EDIT:

    On a Model, you probably will be able to set a connection this way:

    $posts = new Word;
    $posts->setConnection('mysql-collation');
    $posts->where(...);
    
    0 讨论(0)
提交回复
热议问题