0

SQL Server 2005 から mysql に切り替えましたが、これは実際には問題ではありませんでした。

SQL サーバーに存在する (n)varchar に若干の問題があります。通常、私は使用しました:

mapping.Map(x => x.bla).Length(10000);

bla を nvarchar(max) に設定します。これはmysqlで機能しますか?mysql には nvarchar がないと思います。次のようなものを使用する必要があります。

alter table sometable modify bla VARCHAR(21844) CHARACTER SET utf8

既存の列を「nvarchar(max)」に更新します。私が得ているので、これは正しいですか:

「行サイズが大きすぎます。使用されているテーブル タイプの最大行サイズです」

私が使用している場合:

alter table sometable modify bla VARCHAR(1000) CHARACTER SET utf8

動作しますが、これが mysql で「nvarchar(max)」を達成するかどうかはわかりません。

4

1 に答える 1

2

マニュアルで説明されているように:

すべてのテーブル (ストレージ エンジンに関係なく) の最大行サイズは 65,535 バイトです。ストレージ エンジンは、この制限に追加の制約を課し、有効な最大行サイズを減らす場合があります。

すべての列の合計の長さがこのサイズを超えることはできないため、行の最大サイズによって列の数 (および場合によってはサイズ) が制限されます。たとえば、utf8文字には 1 文字あたり最大 3 バイトが必要であるためCHAR(255) CHARACTER SET utf8、サーバーは 1 つの列に 255 × 3 = 765 バイトを値ごとに割り当てる必要があります。したがって、テーブルには 65,535 / 765 = 85 を超える列を含めることはできません。

可変長列のストレージには、行サイズに対して評価される長さのバイトが含まれます。たとえば、VARCHAR(255) CHARACTER SET utf8列は値の長さを格納するのに 2 バイトかかるため、各値は最大 767 バイトを取ることができます。

したがって、テーブルに存在する他の列を考慮し、この列に使用できる最大サイズを計算する必要がありますVARCHAR

ただし、長いテキスト値用のスペースが必要な場合は、TEXTこの制限によって制約されないデータ型を使用してみませんか (9 から 12 バイトを除いて)。

于 2012-05-01T09:12:48.280 に答える