MySQLのvarchar(max)に相当するものは何ですか?
6 に答える
varcharの最大長は、MySQLの最大行サイズである64KB(BLOBを除く)の影響を受けます。
VARCHAR(65535)
ただし、マルチバイト文字セットを使用する場合は、制限が低くなることに注意してください。
VARCHAR(21844) CHARACTER SET utf8
ここではいくつかの例を示します。
最大行サイズは65535ですが、varcharには、特定の文字列の長さをエンコードするための1バイトまたは2バイトも含まれています。したがって、テーブル内の唯一の列であっても、実際には最大行サイズのvarcharを宣言することはできません。
mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
しかし、長さを短くしようとすると、機能する最大の長さが見つかります。
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
ここで、テーブルレベルでマルチバイト文字セットを使用しようとすると、各文字が複数バイトとしてカウントされることがわかります。UTF8文字列は、必ずしも文字列ごとに複数バイトを使用するわけではありませんが、MySQLは、将来のすべての挿入を1バイト文字に制限するとは想定できません。
mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
最後のエラーが私たちに言ったことにもかかわらず、InnoDBはまだ21845の長さを好みません。
mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
21845 * 3 = 65535と計算すると、これは完全に理にかなっていますが、とにかく機能しませんでした。21844 * 3 = 65532であるのに対し、これは機能します。
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
TLDR; MySql には と同等の概念がありませんvarchar(max)
。これは MS SQL Server の機能です。
VARCHAR(最大)とは何ですか?
varchar(max)
は、Microsoft SQL Server の機能です。
バージョン 2005 より前のバージョンの Microsoft SQL サーバーでは、列に格納できるデータの量は 8KB に制限されていました。8KB を超えるサイズを格納するにはTEXT
、 、NTEXT
、またはBLOB
列タイプを使用する必要があります。これらの列タイプは、テーブル データ ページとは別の 8K ページのコレクションとしてデータを格納しました。行ごとに最大 2GB の格納をサポートしていました。
これらの列タイプの大きな注意点は、通常、データにアクセスして変更するには特別な関数とステートメントが必要であるということです (例: READTEXT
、WRITETEXT
、およびUPDATETEXT
) 。
SQL Server 2005 ではvarchar(max)
、大きな列のデータを取得および変更するために使用されるデータとクエリを統合するために導入されました。列のデータvarchar(max)
は、テーブル データ ページとインラインで格納されます。
MAX 列のデータが 8KB のデータ ページを埋めると、オーバーフロー ページが割り当てられ、前のページがそれを指し、リンクされたリストを形成します。TEXT
、NTEXT
、および とは異なりBLOB
、varchar(max)
列タイプは他の列タイプと同じクエリ セマンティクスをすべてサポートします。
だからvarchar(MAX)
本当に意味varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
がないvarchar(MAX_SIZE_OF_A_COLUMN)
。
MySql には同等のイディオムがありません。
MySqlの a と同じ量のストレージを取得するには、列タイプvarchar(max)
に頼る必要があります。この記事では、MySql に大量のデータを効率的に格納する非常に効果的な方法について説明します。BLOB
varcharの最大長は
65535
列が設定されている文字セット内の文字の最大バイト長で割った値(たとえば、utf8 = 3バイト、ucs2 = 2、latin1 = 1)。
長さを格納するためのマイナス2バイト
マイナス他のすべての列の長さ
ヌル可能である8列ごとにマイナス1バイト。列がnull/nullでない場合、これはnullマスクと呼ばれる1バイト/バイトの1ビットとして格納され、列ごとに1ビットがnull可能です。
制限サイズ未満の場合、Mysqlは列をVARCHARからTEXTに変換します!!!
mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql>
MySQL 5.6.12 の varchar の最大長は 4294967295 です。