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

バイト数を取得する

SQLでバイト数を取得する関数は、次のようにDBMSによって使うものが異なります。

DBMS 関数
MySQL LENGTH関数
OCTET_LENGTH関数
PostgreSQL OCTET_LENGTH関数
Oracle LENGTHB関数
Access LENB関数
SQLServer なし

それぞれの使い方を見ていきましょう。

LENGTH関数

LENGTH関数は、引数に指定された文字列の長さをバイト単位で取得する関数です。

MySQLで使用できます。

記述方法は次のようになります。

SELECT LENGTH(文字列);

使い方は上記のように非常にシンプルです。

文字列の長さをバイト単位で返します。

また、マルチバイト文字の場合は複数バイトとして取得されます。

 

では実際に確認してみましょう。

次のように記述します。

mysql> SELECT LENGTH('potepanstyle');
+------------------------+
| LENGTH('potepanstyle') |
+------------------------+
|                     12 |
+------------------------+
1 row in set (0.00 sec)

上記のようにバイト数が取得できました。

マルチバイトの場合は次のようになります。

mysql> SELECT LENGTH('ポテパンスタイル');
+------------------------------------+
| LENGTH('ポテパンスタイル')         |
+------------------------------------+
|                                 24 |
+------------------------------------+
1 row in set (0.00 sec)

OCTET_LENGTH関数

OCTET_LENGTH関数もLENGTH関数と同様に、引数に指定された文字列の長さをバイト単位で取得する関数です。

MySQL と PostgreSQLで使用できます。

記述方法は次のようになります。

SELECT OCTET_LENGTH(文字列);

先ほど同様に、実際に動かして確認してみます。

mysql> SELECT OCTET_LENGTH('potepanstyle');
+------------------------------+
| OCTET_LENGTH('potepanstyle') |
+------------------------------+
|                           12 |
+------------------------------+
1 row in set (0.00 sec)
mysql> SELECT OCTET_LENGTH('ポテパンスタイル');
+------------------------------------------+
| OCTET_LENGTH('ポテパンスタイル')         |
+------------------------------------------+
|                                       24 |
+------------------------------------------+
1 row in set (0.00 sec)

このように、バイト数が取得できました。

LENGTHB関数

LENGTHB関数も、引数に指定された文字列の長さをバイト単位で取得する関数です。

Oracleデータベースで使用できます。

記述方法は次の通りです。

SELECT LENGTHB(文字列);

執筆者がOracleデータベースを使用していないため実行結果は省略しますが、LENGTH関数やOCTET_LENGTH関数と同じ結果が得られます。

LENB関数

LENB関数も、引数に指定された文字列の長さをバイト単位で取得する関数です。

Accessで使用できます。

記述方法は次の通りです。

SELECT LENB(文字列);

執筆者がAccessを使用していないためOracleデータベース同様、実行結果は省略します。

バイト数を指定して取得する

バイト数を指定して取得する関数には、次のようなものがあります。

「MySQLやPostgreSQLではバイト数を指定することはできないの?」と思うかもしれません。

確かに専用の関数はありませんが、関数を組み合わせることでバイト数で取得することができます。

サンプルで確認してみましょう。

mysql> SELECT CONVERT(LEFT(CAST('potepanstyle' as BINARY), 7) USING utf8);
+-------------------------------------------------------------+
| CONVERT(LEFT(CAST('potepanstyle' as BINARY), 7) USING utf8) |
+-------------------------------------------------------------+
| potepan                                                     |
+-------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

上記のSQL文を少し見ていきます。

CAST('potepanstyle' as BINARY)

CAST文で「potepanstyle」をBINARY型に型変換しています。

LEFT(CAST('potepanstyle' as BINARY), 7)

次に、LEFT文で型変換した「potepanstyle」を左から7バイト分取得します。

CONVERT(LEFT(CAST('potepanstyle' as BINARY), 7) USING utf8)

最後にCONVERT文で、7バイトの「potepan」をUTF8に変換しました。

これで「potepan」という文字列として取得可能です。

これらの処理に使用した「CAST」「LEFT」「CONVERT」の使い方は次の記事で解説しています。

【関連記事】

▶︎SQL castはデータ型の明示的な変換 データベースによって、オプションに差異あり

▶︎【SQL】RIGHT関数とLEFT関数の詳細と移植の際の注意点について

▶︎SQL convertは、値の型変換をおこなう 文字列のキャラクターセット変更が可能

バイト数を変更する方法

カラムの文字数、バイト数を変更するには「ALTER TABLE MODIFY文」を使いましょう。

記述方法は次の通りです。

ALTER TABLE テーブル名 MODIFY カラム名 カラム定義;

変更したいテーブル名、カラム名を指定し、定義を変更すればOKです。

mysql> SHOW COLUMNS FROM user_list;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| user_id | int         | NO   | PRI | NULL    | auto_increment |
| name    | varchar(30) | YES  |     | NULL    |                |
| age     | int         | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.07 sec)

上記のように、カラムの定義・バイト数が変更できました。

まとめ

SQLのバイト数について解説しました。

DBMSごとに使う関数が異なりますが、基本的な使い方は同様です。

バイト数で取得したい場合はぜひこの記事を参考にしてみてください。

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

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

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

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

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

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

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

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

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

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

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