1. ホーム
  2. mysql

[解決済み] MySQLのVARCHARの長さとUTF-8

2023-03-02 05:47:39

質問

MySQL で、新しい VARCHAR(32) フィールドを作成した場合、そのフィールドに 32 バイトのデータまたは 32 文字 (マルチバイト) を格納できることを意味しますか?

どのように解決するのですか?

この回答は、googleの検索結果の上位に表示されましたが、正しくありませんでした。

混乱 は、おそらくテストされた MySQL の異なるバージョンに起因するものです。

  • バージョン 4 はバイトをカウントします。
  • バージョン 5 は文字数をカウントします。

以下は、MySQL 5 の公式サイトからの引用です。 ドキュメント :

MySQL はキャラクタ列の定義における長さの指定をキャラクタ単位で解釈します(MySQL 4.1 以前では、列の長さはバイト単位で解釈されました)。(これは、CHAR、VARCHAR、および TEXT タイプに適用されます。

興味深いことに(考えてもみなかったのですが)、varchar カラムの最大長は、次のように utf8 の影響を受けます。

MySQL 5.0.3 以降の VARCHAR の実効最大長は、最大行サイズ (65,535 バイト、これはすべての列で共有されます) と使用する文字セットによって左右されます。たとえば、utf8 文字は 1 文字あたり最大 3 バイトを必要とするため、utf8 文字セットを使用する VARCHAR カラムは、最大 21,844 文字と宣言することができます。