web-dev-qa-db-ja.com

MySQLはなぜlatin1_swedish_ciをデフォルトとして使用するのですか?

Latin1_swedishがMySQLのデフォルトである理由を誰もが知っていますか。 UTF-8はより互換性があるように思えますか?

通常、デフォルトは最良の普遍的な選択であるため選択されますが、この場合、それは彼らがやったことのようには見えません。

51
Metropolis

私が見る限り、latin1はマルチバイト前のデフォルトの文字セットであり、おそらく下位互換性の理由のために継続されているようです(たとえば、照合を指定しなかった古いCREATEステートメントの場合)。

ここ から:

4.0で何をしたか

MySQL 4.0(およびそれ以前のバージョン)は、サーバーレベルで指定された文字セットとシングルバイト文字エンコーディングの照合の組み合わせ概念に相当するもののみをサポートしていました。デフォルトはlatin1で、これはMySQL 4.1のlatin1の文字セットとlatin1_swedish_ciの照合に対応します。

swedishの理由については、MySQL ABがスウェーデン語である/だったからだと推測できます。この照合順序を選択する他の理由はわかりません。特定の並べ替えの癖があります(ÄÖÜはZの後に来ると思います)。

39
Pekka 웃

latin1はデフォルトの文字セットです。 MySQLのlatin1は、Windowsのcp1252文字セットと同じです。これは、IANA latin1が0x80と0x9fの間のコードポイントを「未定義」として扱うことを除いて、公式のISO 8859-1またはIANA(Internet Assigned Numbers Authority)latin1と同じであることを意味します。それらのポジションのために。

から

http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html

理由を理解するのに役立つかもしれません。

6
bear

シングルバイトエンコーディングを使用すると、マルチバイトエンコーディングよりもいくつかの利点があります。バイト単位の文字列の長さは、文字単位の文字列の長さと同じです。したがって、SUBSTRINGのような関数を使用する場合、文字またはバイトを意味するかどうかは直感的に明確ではありません。また、同じ理由で、マルチバイトエンコーディングをサポートするには、内部コードを大幅に変更する必要があります。

2
AndreKR

この種の最も奇妙な特徴は歴史的なものです。彼らは昔のようにそれをやったが、今ではその行動に応じていくつかのアプリを壊さずにそれを変更することはできない。

おそらく、UTF8は一般的ではなかったでしょう。または、MySQLは、複数のバイトが文字でエンコードする文字セットをサポートしていなかった可能性があります。

0
CodesInChaos