【MySQL】固定長文字列型・可変長文字列型(CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT)
MySQLの文字列型について解説します。
検証環境
文字列型
文字列型はその名の通り文字列の型です。
大きく分けて固定長文字列型と可変長文字列数型の2つの文字列型が存在します。
固定長文字列型
固定長文字列型は文字数を固定する型です。
文字数を固定するため、その文字数より小さい文字列を格納する場合でも、一定のデータサイズを使用します。
可変長文字列数型
可変長文字列型は文字列に合わせてデータサイズを変動する型です。
MySQLの文字列型は固定長文字列型が1種類、可変長文字列型が5種類、合計6種類の文字列型があり、型によって記憶可能な文字数(最大長)が異なります。
種類 | 型 | 最大長 |
---|---|---|
固定長文字列 | CHAR | 0 ~ 255 |
可変長文字列 | VARCHAR | 0 ~ 65535 |
可変長文字列 | TINYTEXT | 28-1 |
可変長文字列 | TEXT | 216-1 |
可変長文字列 | MEDIUMTEXT | 224-1 |
可変長文字列 | LONGTEXT | 232-1 |
また、文字数(最大長)はマルチバイト文字の有無や文字コードにより、記憶可能な文字数とは実際に異なる場合があります。
CHAR
CHARは固定長文字列型です。
基本構文
カラム名 CHAR(最大長)
CHAR後の丸括弧(()
)内に最大長を指定します。
サンプル
mysql> CREATE TABLE sample ( str CHAR(11) );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World' );
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Hello' );
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World!' );
ERROR 1406 (22001): Data too long for column 'str' at row 1
VARCHAR
VARCHARは可変長文字列数です。
基本構文
カラム名 VARCHAR(最大長)
VARCHAR後の丸括弧(()
)内に最大長を指定します。
サンプル
mysql> CREATE TABLE sample ( str VARCHAR(300) );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World! Good Morning!' );
Query OK, 1 row affected (0.01 sec)
TINYTEXT
TINYTEXTは可変長文字列型です。
基本構文
カラム名 TINYTEXT
サンプル
mysql> CREATE TABLE sample ( str TINYTEXT );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World!' );
Query OK, 1 row affected (0.00 sec)
TEXT
TEXTは可変長文字列型です。
基本構文
カラム名 TEXT
サンプル
mysql> CREATE TABLE sample ( str TEXT );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World!' );
Query OK, 1 row affected (0.00 sec)
MEDIUMTEXT
MEDIUMTEXTは可変長文字列型です。
基本構文
カラム名 MEDIUMTEXT
サンプル
mysql> CREATE TABLE sample ( str MEDIUMTEXT );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World!' );
Query OK, 1 row affected (0.00 sec)
LONGTEXT
LONGTEXTは可変長文字列型です。
基本構文
カラム名 LONGTEXT
サンプル
mysql> CREATE TABLE sample ( str LONGTEXT );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Hello World!' );
Query OK, 1 row affected (0.00 sec)