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

MySQLでアクセントに敏感な主キーを使用する

    照合 。 3つではなく2つの選択肢があります:

    utf8_bin これらすべてを異なるとして扱います :demandé およびdemande およびDemandé

    utf8_..._ci (通常はutf8_general_ci またはutf8_unicode_ci )これらすべてを同じとして扱います :demandé およびdemande およびDemandé

    大文字と小文字の区別のみが必要な場合(demandé =demande 、ただしどちらもDemandéと一致しません )、あなたは運が悪いです。

    アクセント感度のみが必要な場合(demandé =Demandé 、ただしどちらもdemandeと一致しません )、あなたは運が悪いです。

    宣言 。選んだことを何でもするための最良の方法:

    CREATE TABLE (
        name VARCHAR(...)  CHARACTER SET utf8  COLLATE utf8_...  NOT NULL,
        ...
        PRIMARY KEY(name)
    )
    

    その場で照合を変更しないでくださいnameで照合が異なる場合、これはインデックスを使用しません(つまり、遅くなります)。 :

    WHERE name = ... COLLATE ...
    

    バイナリデータ型 BINARYVARBINARY およびBLOB CHARと非常によく似ています 、VARCHAR 、およびTEXT COLLATE ..._binを使用 。おそらく唯一の違いは、テキストがVARCHAR ... COLLATE ..._binに格納されている有効なutf8についてチェックされることです。 、ただし、VARBINARY...に保存する場合はチェックされません。 。 比較WHEREORDER BY 、など)は同じになります。つまり、ビットを比較するだけで、大文字小文字の区別やアクセントの削除などは行わないでください。



    1. 続編:複数のデータベースの使用

    2. MySQLを使用してランダムで一意の8文字の文字列を生成する

    3. Djangoのテストデータベースをメモリ内でのみ実行するにはどうすればよいですか?

    4. mysqlテーブルの列名に許可されていない文字リストはありますか?