SQLで全角文字と半角文字を判定するにはLENGTHBやOCTET_LENGTH関数で取得したバイト数とLENGTH関数で取得した文字数を比較することで判断することができます。
使用例
補足
1. 判定ロジックの背景と利用ケース
-
全角文字・半角文字を判定する目的として、データ品質管理(例:ユーザー登録時の文字種チェック)、システム移行時の文字コード整合性確認、レポートや印刷用データの整形などが考えられます。
-
特にマルチバイト文字(日本語)環境では、1文字あたりのバイト長が異なるため、バイト長と文字数のずれを利用した判定が有効です。
-
本記事で紹介されているように、例えば PostgreSQL の LENGTH() と OCTET_LENGTH() の比較を使う方法はシンプルでクロスプラットフォームにも応用可能です。
2. 各データベースでの関数違い・注意点
-
PostgreSQL:文字数を返す LENGTH(text)、バイト長を返す OCTET_LENGTH(text) を使う。
例:WHERE length(col) <> octet_length(col)
-
Oracle:Oracle には直接 OCTET_LENGTH がないが、LENGTHB() がバイト長を、LENGTH() が文字数を返す(ただしCHAR型/NCHAR型、CHARSET設定によって挙動が異なる)ので、LENGTHB(col) <> LENGTH(col) という書き方が使えます。
-
MySQL:CHAR_LENGTH(col) が文字数、LENGTH(col) がバイト数を返すので、CHAR_LENGTH(col) <> LENGTH(col) といった判定が可能。
-
SQL Server:LEN() が文字数(末尾の空白はカウントされない)、DATALENGTH() がバイト長(文字コード依存)を返すので、環境次第では LEN(col) * 2 <> DATALENGTH(col) などと併用するケースがあります。
-
注意点として、文字コード(UTF-8、UTF‐16、Shift_JIS 等)が環境によって異なると「半角=1バイト」「全角=2バイト」という前提が崩れる場合があります。特にUTF-8では日本語全角文字が3バイトある場合もありますので、バイト数の比較ロジックを適用する際は対象の文字コードを意識してください。
3. 実運用的な工夫・パフォーマンス面の注意
-
大規模テーブルでこのようなチェックを行う場合、たとえば WHERE LENGTH(col) <> OCTET_LENGTH(col) のような関数を大量の行に対して実行するとインデックスが効かず、全表スキャンになる可能性があります。
-
判定だけでなく、誰がいつどのレコードを修正したか(=トレーサビリティ)を残すなら、更新日時・更新者カラムを活用して「チェック済み/要修正」などのフラグを設けると管理しやすくなります。
-
将来的に正規表現(REGEXP)や文字列関数(例えば Unicode プロパティを利用した判定)を使って「半角カタカナ」「全角英数字」「漢字のみ」などより細かく制御したい場合も多いため、可能ならその準備もしておくと良いでしょう。
4. よくある誤り・ハマりどころ
-
前提として「文字数とバイト数が異なる=全角含む」という仮定をしているため、 半角カタカナ や 絵文字(マルチバイト4バイトなど) が含まれていると誤検知される可能性があります。たとえば、UTF-8環境で絵文字が4バイトなので「文字数1、バイト数4」→「異なる」と判定されてしまう。
-
文字コード設定の違い:テーブル/カラムごとに異なる照合順序・文字セットが指定されていると、バイト数や文字数の挙動が予想と異なることがあります。例えば MySQL で utf8mb4 を使っているなら日本語全角文字が3バイトではなく4バイトになるケースあり。
-
更新系の処理で「半角に変換された/全角に変換された」履歴を残していないため、修正したデータが「元はどちらだったか」が分からなくなるという運用上のリスク。必要に応じて「修正前の値」保持やログ出力を検討するべきです。
5. 具体的な応用例・コードスニペット
PostgreSQL での運用例
MySQL での運用例
Oracle での運用例
6. フォローアップ可能な内容・発展トピック
-
正規表現を用いて「全角ひらがな」「全角カタカナ」「全角英数字」「半角英数字」などを分類・抽出する方法。
-
文字種に応じて別テーブルへアーカイブ・除外といったワークフロー設計。
-
BI/レポート用途で「文字種別カウント」を可視化する方法(例:Excel/Tableau/BIツールを用いた文字種分布グラフ化)。
-
外部システム(CSV/Excel)からデータインポート時に「文字種チェック+自動整形(全角→半角、半角→全角)」を組み込むETL(Extract-Transform-Load)設計。
-
将来的に多言語対応を視野に入れた「Unicodeカテゴリ判定」(たとえば、CJK文字・ラテン文字・Emoji など)を含めた文字種チェック。
2015年4月22日~サービス開始していたスマホアプリゲーム「オルタンシア・サーガ」が本日2022年05月31日にサービス終了となってしまいました。
個人的には約6年も楽しませて頂いたゲームなのでもう団戦できないと思うと残念です(ノД`)
一応「駑馬十駕」という団で団長やってたので記念に最後まで在籍して頂いた団員様20名をご紹介。
サービス終了まで拙い団長にお付き合い頂き本当にありがとうございました(*^^*)
駑馬十駕 団員紹介(Rank順)
素顔のままで
ミスランディア
マガリかど
シュローカ
ミギー
カムイ卍
アルフレッド
マニエド
AERAS
ロン
ノア
ユーグ
COU
アナン
ユウ
クラウド
ゆう
セシル
ごまめ
獅子龍虎
SQLでバイト数を取得する場合は、LENGTHBやOCTET_LENGTH関数を使用することで取得出来ます。
DBMS毎に使用できる関数が異なり、ORACLEではLENGTHB、MYSQLやPostgreSQLではOCTET_LENGTH、AccessではLENBが使用できます。
DBMS毎のバイト数を取得できる関数
| DBMS | バイト数を取得できる関数 | 備考 |
| ORACLE | LENGTHB | ・全角文字の場合には使用しているキャラクタセットによりバイト数は異なる
※UTF-8 の場合には全角文字1文字が3バイト
・ CLOB と NCLOB において LENGTHB は使用できない |
MYSQL
or
PostgreSQL | OCTET_LENGTH | |
| Access | LENB | |
| SQLServer | 対象なし | |
使用例
- サンプルテーブル「goods」

- クエリー(SQL)
|
|
SELECT name, OCTET_LENGTH(name) FROM goods; |
- 出力結果

.htaccessを記載する際の順序について
.htaccessファイルを記述する際、リダイレクトやリライトの記述が複数ある場合は、まずスコープが小さい(限定的な)ルールを先に記述後、適用範囲の広い(一般的な)ルールを記載するのが妥当。
- アクセス制御
- 外部向けリダイレクト
- 内部でのリライト
PageSpeed Insightsでサイト分析した時に「テキスト圧縮の有効化」の欄に以下の様に表示された場合の対応方法について記載します。
- テキストベースのリソースは圧縮(gzip、deflate、またはbrotli)して配信し、ネットワークの全体的な通信量を最小限に抑えてください。
- ウェブサーバーの設定でテキスト圧縮を有効にできます。

テキスト圧縮を有効にする方法
- ウェブサーバー上の「.htaccess」ファイルへ下記記載を追加することでウェブサーバの出力データをGZIPで圧縮することによって、データの転送速度を向上させウェブサイトを速く表示させることができます。
|
|
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/js application/x-javascript application/javascript |
注意事項
- すでに圧縮済みのファイルにDEFLATEフィルタをかけるとパフォーマンスが低下するため、画像、動画、音声、ZIP、PDFファイル等にはDEFLATEフィルタは指定しない
修正例
- 修正前
|
|
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> |
- 修正後
|
|
<IfModule mod_rewrite.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/js application/x-javascript application/javascript RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> |
当サイトで投稿した記事は公開時に自動ツイートされるように「WP to Twitter」というプラグインで設定していたのですが、いつの間にかtwitter側の仕様に変更がありプラグインを利用するにはtwitterの開発者アカウントの取得が必要になって申請していました。
申請後、以下の質問がtwitter側から送られてきたので、今後申請する方は下記事項を明確にして申請すれば一発で通りやすいかと思います。
- Twitter APIを使用する中核的な使用目的、意図、ビジネス上の目的。
- ツイート、Twitterアカウント、またはそのコンテンツを分析する場合は、実施する分析の内容と手法または技術について詳しくお教えください。
- ツイート、リツイート、いいねの使用が含まれる場合は、Twitterアカウントまたはそのコンテンツに対してどのような操作を行うのかをお教えください。
- TwitterコンテンツをTwitter以外で表示する場合は、お客さまの製品またはサービスで、ツイートおよびTwitterコンテンツがどこにどのように表示されるかを、行レベルの表示か集計表示かを含めてご説明願います。

返信は日本語でしましたが、無事申請通りました(*^^*)
Excelで”TEST_CHANGE”のようなスネークケースの文字列を”testChange”のようなキャメルケースの文字列へ変換変換する方法です。
スネークケースからアッパーキャメルケースへの変換方法
スネークケースから先頭大文字のアッパーキャメルケースへ変換する場合は「PROPER」関数と「SUBSTITUTE」関数を使用します。
以下の例ではA2セルにある内容をB2セルへアッパーキャメルケースで表示しています。
B2セルへは「=SUBSTITUTE(PROPER(A2),”_”,””)」と入力します。

スネークケースからローワーキャメルケースへの変換方法
スネークケースから先頭小文字のローワーキャメルケースへ変換する場合は「PROPER」、「SUBSTITUTE」、「LEN」、「MID」、「LEFT」、「LOWER」関数を使用します。
以下の例ではA2セルにある内容をB2セルへアッパーキャメルケースで表示しています。
B2セルへは「=SUBSTITUTE(PROPER(A2),”_”,””)」と入力します。
「EML Tree-View」はemlファイルをバックアップしたけど既存のメールソフトだと混同して紛らわしいので
別のメールソフトでバックしたメールファイルを参照したい場合に便利なフリーソフトです。
仕様
| 項目 | 内容 |
| ソフト名 | EML Tree-View |
| ライセンス | フリーソフト |
| OS | Windows |
ダンロード先
特徴・用途
- バックアップしたメールをサッと開きたい、検索したい。
- メールのバックアップを随時とりたい。
- バックアップしたメールを、期間ごとに整理したい。
使用方法
- ダウンロードした「EMLTreeView.zip」を展開して「EMLTreeView.exe」を実行します。
- メニューのファイル⇒フォルダを開くからemlファイルのバックアップフォルダを選択するだけ。
「圧縮フォルダ(ZIP)を開く」を選択すればzipファイルからも開けます。

「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。