Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのvarcharについてまとめています。

SQLのvarcharは、文字列を格納するデータ型

以下はMySQLの例です。文字列を格納するデータ型にはvarchar以外にcharやtextがありますが、挙動に違いがあります。

textはキーに指定できませんし、データinsert時に末尾に空白が入るかどうかに違いがあります。

varchar(8)、char(8)、textの3つのデータ型を持つテーブルvchatestを作成し、”STR “(末尾に空白)という文字列をそれぞれのカラムにinsertしています。

charの場合は、末尾に空白の入る文字列だと、空白が削除されてしまうんですね。

// vchatestテーブルをcreate
mysql> CREATE TABLE `employees`.`vchatest` ( `varchar_string` VARCHAR(8) NOT NULL , `char_string` CHAR(8) NOT NULL , `text_string` TEXT NOT NULL , PRIMARY KEY (`varchar_string`)) ;
Query OK, 0 rows affected (0.11 sec)

// vchatestテーブルの構造を確認
mysql> desc employees.vchatest;
+----------------+------------+------+-----+---------+-------+
| Field          | Type       | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+-------+
| varchar_string | varchar(8) | NO   | PRI | NULL    |       |
| char_string    | char(8)    | NO   |     | NULL    |       |
| text_string    | text       | NO   |     | NULL    |       |
+----------------+------------+------+-----+---------+-------+
3 rows in set (0.03 sec)

// vchatestにデータを1件挿入
mysql> INSERT INTO `employees`.`vchatest` (`varchar_string`, `char_string`, `text_string`) 
VALUES ('STR ', 'STR ', 'STR ');
Query OK, 1 row affected (0.01 sec)

// varchar、char、textで末尾に空白が入るかどうかに違いあり
mysql> select concat('"',varchar_string,'"'), concat('"',char_string,'"'), concat( '"',text_string,'"') from vchatest;
+--------------------------------+-----------------------------+------------------------------+
| concat('"',varchar_string,'"') | concat('"',char_string,'"') | concat( '"',text_string,'"') |
+--------------------------------+-----------------------------+------------------------------+
| "STR "                         | "STR"                       | "STR "                       |
+--------------------------------+-----------------------------+------------------------------+
1 row in set (0.01 sec)

【関連記事】
MySQLのVARCHAR型 charとは末尾の空白の扱いが違う

また、MySQLの場合、データ型宣言のvarchar(x)のxの数値は文字数です。

// あいうえおあいうえお=10文字20バイトをvarchar(8)にinsertしようとするとエラー
mysql> INSERT INTO `employees`.`vchatest` 
(`varchar_string`, `char_string`, `text_string`) VALUES ('あいうえおあいうえお', 'x', 'x');
ERROR 1406 (22001): Data too long for column 'varchar_string' at row 1

// あいうえおあいう=8文字16バイトをvarchar(8)にinsertすると成功
mysql> INSERT INTO `employees`.`vchatest` 
(`varchar_string`, `char_string`, `text_string`) VALUES ('あいうえおあいう', 'x', 'x');
Query OK, 1 row affected (0.04 sec)

// varchar(8)に「あいうえおあいう」が格納されている。
mysql> select * from vchatest;
+-----------------+-------------+-------------+
| varchar_string  | char_string | text_string |
+-----------------+-------------+-------------+
| あいうえおあいう  | x           | x           |
+-----------------+-------------+-------------+

上記の例では、varchar(8)には全角10文字は格納できずエラーとなりますが、全角8文字はエラーなく格納できています。このことから、MySQLのvarcharの数値は文字数であることを確認しているんですね。

SQL Serverでは、varcharはバイト数、nvarcharは文字数を指定するものとしてデータ型自体が分けられています。また、Oracleでは、varchar2はバイト数指定になります。varchar2(10)なら、10バイトの文字列が格納できるんですね。

このように、varcharの仕様はデータベース管理ソフトごとにことなっているようです。

まとめ

ポテパンダの一言メモ
  • varcharは、文字列を格納するデータ型
  • varchar型、char型、text型で挙動が異なる
  • varcharのサイズ指定はデータベース管理ソフトごとに文字数の場合とバイト数の場合あり

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。