sql >> データベース >  >> RDS >> Mysql

SET NAMESなしでPDOとの照合を指定するにはどうすればよいですか?

    これが2つの答えです。

    これは、DSNで、またはMYSQL_ATTR_INIT_COMMAND(接続オプション)として設定できます。

    DSNの方が優れていると思います。

    $connect = new PDO(
      "mysql:host=$host;dbname=$db;charset=utf8", 
      $user, 
      $pass, 
      array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
      )
    ); 
    

    UTF-8を指定した場合 utf8_general_ciのデフォルトの照合を使用しています 、dbテーブルまたはフィールドが別のものを使用していない限り。

    サーバー全体がこのデフォルトの照合で応答するようにする場合は、構成ディレクティブを使用します。

    collation_server=utf8_unicode_ci 
    character_set_server=utf8
    

    したがって、接続時に毎回指定する必要はありません。

    照合は文字の並べ替えに影響し、データベースのテーブルとフィールドに設定されます。これらの設定は、テーブルをクエリするときに尊重されます。それらが設定されていることを確認してください。データベースで照合が設定されているUTF-8名を使用してください。

    あなたのコメント:

    MySQLマニュアル から引用しましょう これを証明するには:

    私の答え:テーブルがこれを明示的に変更しない限り、暗黙的に機能します。

    コメントからの質問:

    例:列の照合はテーブルの照合をオーバーライドします

    CREATE TABLE t1
    (
        col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

    列にCHARACTERSETXとCOLLATEYの両方が指定されている場合は、文字セットXと照合Yが使用されます。列の文字セットはutf8です。 および照合utf8_unicode_ci テーブルがlatin1+latin1_binにある間、テーブル列で指定されているとおり。

    例:一般的にテーブル照合が使用されます

    列/フィールドで照合が明示的に指定されていない場合は、テーブルの照合が使用されます。

    CREATE TABLE t1
    (
        col1 CHAR(10)
    ) CHARACTER SET latin1 COLLATE latin1_bin;
    

    col1には照合latin1_binがあります。

    utf8_unicode_ciが必要な場合 照合、一般的なテーブルまたは列/フィールドに設定します。



    1. MySQLでjavaLocalDateを永続化する

    2. PostgreSQLのバージョンを確認する方法

    3. Oracleクライアントとネットワークコンポーネントが見つかりませんでした

    4. シンプルだが重いアプリケーションは多くのリソースを消費します。最適化する方法は?