Traffine I/O

日本語

2023-03-12

データベースにおけるCHAR、VARCHAR、およびTEXT型

データベースの文字列データ型

適切なデータ型を選択することは、効果的なデータベース設計において重要です。データ型は保存されるデータの正確性だけでなく、クエリのパフォーマンス、ストレージスペース、データの整合性にも影響を与えます。文字列データ型の一部として、CHARVARCHAR、およびTEXTは、テキストデータの保存に一般的に使用されます。

それぞれのデータ型には異なる特性があり、保存されるデータの具体的な要件によって適したものがあります。これらはスペースの割り当て方、保存できるデータ量、さまざまなシナリオでのパフォーマンスなどで異なります。

CHAR

SQLにおけるCHARデータ型は、文字列の値を保存するために使用されます。このデータ型はCHAR(n)と定義され、nはカラムが保存できる固定長の文字数を表します。この長さはMySQLでは1から255までの範囲があります。CHARの主な特徴は、固定長のデータ型であるということです。つまり、実際に保存されるデータの長さに関係なく、カラムのサイズは変わらないということです。

CHARの動作

CHARカラムにデータを挿入する際、SQLは指定された長さまでスペースを埋めます。データが定義された長さよりも短い場合、残りのスペースは末尾にスペースで埋められます。データが取得される際には、これらのスペースは削除されます。

次の例を考えてみます。

sql
CREATE TABLE Employee (
    FirstName CHAR(10),
    LastName CHAR(10)
);

ここでは、FirstNameLastNameは両方ともCHAR(10)として定義されています。"John Doe"という名前を挿入した場合、データは以下のように保存されます。

FirstName: 'John      '  (6 spaces added)
LastName:  'Doe       '  (7 spaces added)

CHARにおけるスペースの割り当て

上記の例に示されているように、CHARデータ型は実際に保存されるデータの長さに関係なく、定義されたスペースの長さを割り当てます。データが最大長よりもはるかに短い場合、大量のスペースが無駄になる可能性があります。一方、このアプローチは、データベースが各値の終わりを正確に特定できるため、取得プロセスを高速化します。

CHARのユースケース

値の長さが一貫している場合にCHARが最適です。例えば、米国の州の略語(全ての米国の州の略語は2文字で構成されるため)、国コード、または一貫した長さのデータなどを保存するのに適しています。

VARCHAR

SQLにおけるVARCHARデータ型は、可変長の文字列値を保存するために使用されます。これはVARCHAR(n)と定義され、nはカラムが保存できる最大文字数を表します。この長さは、SQLデータベースによって大きな数値まで範囲があります。例えば、MySQLではVARCHARフィールドは最大で65,535文字まで許容されます。

VARCHARの動作

CHARとは異なり、VARCHARは実際のデータを保存するのに必要なだけのスペースと、データの長さを記録するための少しの余分なスペースのみを使用します。つまり、あるVARCHAR(100)のカラムに10文字の文字列を保存する場合、100文字分のスペース(加えて長さ情報のための余分なスペース)ではなく、10文字分のスペースのみが使用されます。

次の例を考えてみます。

sql
CREATE TABLE Employee (
    FirstName VARCHAR(100),
    LastName VARCHAR(100)
);

ここでは、FirstNameLastNameは両方ともVARCHAR(100)として定義されています。"John Doe"という名前を挿入した場合、データは以下のように保存されます。

FirstName: 'John'
LastName:  'Doe'

文字列の末尾には余分なスペースは追加されません。

VARCHARにおけるスペースの割り当て

上記の例に示されているように、VARCHARデータ型は、実際のデータを保存するために必要なスペースと、データの長さを記録するためのいくつかの余分なバイトのみを使用します。追加スペースの量は、カラムの最大サイズによって異なります。例えば、MySQLでは、最大長が255以下の場合、1バイトの追加バイトが使用されます。最大長が255を超える場合は、2バイトの追加バイトが使用されます。

VARCHARのユースケース

カラム内の値の長さが大幅に異なる場合や、データの最大長が平均長よりもはるかに大きい場合に、VARCHARが最適です。例えば、メールアドレス、名前、テキストコメントなどのデータを保存するのに適しています。

TEXT

TEXTはSQLで大量のテキストを保存するために使用されるデータ型です。CHARVARCHARとは異なり、TEXTカラムを作成する際には長さを指定しません。MySQLでは、TEXTフィールドは最大で65,535文字まで保持することができます。TEXTデータ型は、段落や完全なドキュメントなどの大量の文字列データを保存するのに適しています。

TEXTの動作

VARCHARと同様に、TEXTは実際のデータを保存するのに必要なスペースのみを使用します。ただし、VARCHARCHARとは異なり、ソートや文字列操作などの操作においていくつかの制限があります。

次の例を考えてみます。

sql
CREATE TABLE Article (
    Title VARCHAR(100),
    Content TEXT
);

ここでは、TitleVARCHAR(100)として定義され、ContentTEXTとして定義されています。タイトルと記事のコンテンツを挿入した場合、データはVARCHARと同様に末尾に余分なスペースが追加されずに保存されます。

TEXTにおけるスペースの割り当て

TEXTデータ型は、実際のコンテンツを保存するのに必要なスペースのみを割り当てます。ただし、テキスト文字列の長さを保持するために若干の追加バイトのオーバーヘッドがあります。

TEXTのユースケース

大量のテキストを保存する必要がある場合には、TEXTが最適です。コメント、説明、またはVARCHARフィールドの最大長を超える可能性のある任意のデータなどによく使用されます。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!