技術コンテンツ

【MySQL】固定長文字列型・可変長文字列型(CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT)

【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)