MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのVARCHAR型の最大サイズは?文字数の上限と行サイズ制限を解説

MySQLのVARCHAR型の最大文字数

MySQL 5.0.3より前のバージョンでは、VARCHAR型は最大255文字までしか格納できませんでしたが、バージョン5.0.3以降では最大65,535文字まで格納できるようになりました。

公式ドキュメントに基づく仕様

MySQLの公式ドキュメントには、以下のように記載されています。

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

行サイズの上限は65,535バイト

注意すべきは、最大行サイズが65,535バイトに制限されているという点です。これは、テーブル内のすべてのカラムを合計したサイズが65,535バイトを超えてはならないことを意味します。

制限を超えた場合の挙動

実際にこの制限を超えるとどうなるのか、具体例で見てみましょう。

以下は2つのカラムを持つテーブルの例です。1つ目のカラム「one」はvarchar(32765)、2つ目のカラム「two」はvarchar(32766)として定義しています。

必要なバイト数の計算は次のとおりです。

32765+2 + 32766+2 = 65,535バイト

CREATE TABLE IF NOT EXISTS `mytable` (
`one` varchar(32765) NOT NULL,
`two` varchar(32766) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

次に、カラムの長さをさらに増やしてみます。

CREATE TABLE IF NOT EXISTS `mytable` (
`one` varchar(32767) NOT NULL,
`two` varchar(32770) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

上記のSQLを実行すると、次のエラーが発生します。

#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

このエラーメッセージが示すとおり、最大行サイズは65,535バイトであり、この上限を超えるとエラーが表示されます。エラーを回避するには、一部のカラムをTEXT型またはBLOB型に変更する必要があります。

  1. MySQLでVARCHARフィールドのサイズを拡張してもデータは影響を受けない?検証付きで解説

    結論:VARCHARのサイズを拡張しても既存データは失われませんMySQLにおいて、VARCHARフィールドのサイズを拡張(大きく)した場合、そのカラムに格納されている既存のデータが影響を受けることはありません。データはそのまま保持されます。ただし注意点として、逆にサイズを縮小した場合には、格納されているデータが新しいサイズを超えているとエラーやデータの切り詰めなどの問題が発生する可能性があります。以下では、実際にSQLを実行しながらこの挙動を確認していきましょう。1. テーブルを作成するまず、VARCHAR(8)型のカラムを持つテーブルを作成します。mysql> create tabl

  2. Pythonのリストの最大サイズはいくつ?上限値と仕組みを解説

    Pythonのリストの最大サイズとはPythonにおけるリストの最大長(要素数の上限)は、プラットフォームに依存します。具体的には、システムのアドレス空間や搭載されているRAMの容量によって決まります。この上限を確認するには、sysモジュールで定義されている定数 sys.maxsize を使います。64ビットシステムでは、以下のように 263-1(9223372036854775807)が返されます。>>> import sys>>> sys.maxsize9223372036854775807なお、32ビットシステムでは 231-1(2147483647)