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

utf8_turkish_ciからutf8_general_ciへの行でテーブルを更新する効果はありますか?

    列のデータは、文字セットを使用して保存されます。この場合はutf8のようです。

    これらの列を操作する場合(たとえば、等式の比較や順序付けを行う場合)、MySQLは照合を使用します。各列にはデフォルトの照合があり、これはテーブルのデフォルトの照合から継承されます。

    インデックスには、効率的に機能できるように、列のデフォルトの照合が組み込まれています。

    照合によって修飾された等式比較を行うことができます。たとえば、JOIN 指定できます

    ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
    

    またはおそらく

    ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
    

    これにより、テーブルを変更しなくても、照合の違法な組み合わせを排除できます。これは、あなたが求めているデータベースの変更を回避するのに役立つかもしれません。ただし、COLLATEを使用する場合は注意が必要です。 修飾子は、インデックスの使用を無効にすることができます。大きなテーブルがあり、パフォーマンスをインデックスに依存している場合、これは役に立たない可能性があります。

    では、テーブルを変更してデフォルトの照合を変更するとどうなりますか?

    1. データは変更されません(文字セットも変更しない限り)。それは良いことです。
    2. 照合のある列を含むすべてのインデックスが再生成されます。
    3. 比較と順序は変更される場合があります。私はトルコ語を知らないので、何が壊れるかはわかりません。ただし、たとえば、スペイン語では N およびÑ 同じではありません。 N Ñの前に来る スペイン語の照合では、一般的な照合では同じように扱われます。同じように機能するトルコ語のアルファベットのいくつかの側面があるかもしれないので、あなたのORDER BY 結果は正しくありません。

    ただし、COLLATEを指定することで修正できます。 ORDER BYの修飾子 条項。

    ORDER BY (euro.village_name COLLATE utf8_turkish_ci)
    



    1. MySQL WorkbenchファイルをプレーンXMLとして保存することは可能ですか?

    2. GROUPBY句のgroupbyリストに使用される式で集計またはサブクエリを使用することはできません

    3. doctrine2:データを失うことなく1対多から多対多に変換する方法

    4. Oracle関数を呼び出すSpringDataJPA