「ブログ」カテゴリーアーカイブ

ブログ投稿用のカテゴリ

SQL:全角文字と半角文字を判定する方法

SQLで全角文字と半角文字を判定するにはLENGTHBやOCTET_LENGTH関数で取得したバイト数とLENGTH関数で取得した文字数を比較することで判断することができます。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    ORACLEの場合はOCTET_LENGTHをLENGTHBへ変更すれば同様の結果を得られます。

  • 出力結果

補足

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:文字列のバイト数を取得する方法

SQLでバイト数を取得する場合は、LENGTHBやOCTET_LENGTH関数を使用することで取得出来ます。

DBMS毎に使用できる関数が異なり、ORACLEではLENGTHB、MYSQLやPostgreSQLではOCTET_LENGTH、AccessではLENBが使用できます。

 

DBMS毎のバイト数を取得できる関数

DBMSバイト数を取得できる関数備考
ORACLELENGTHB・全角文字の場合には使用しているキャラクタセットによりバイト数は異なる
 ※UTF-8 の場合には全角文字1文字が3バイト
・ CLOB と NCLOB において LENGTHB は使用できない
MYSQL
or
PostgreSQL
OCTET_LENGTH
AccessLENB
SQLServer対象なし

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)
  • 出力結果

.htaccessの記述の正しい記載順序

.htaccessを記載する際の順序について

.htaccessファイルを記述する際、リダイレクトやリライトの記述が複数ある場合は、まずスコープが小さい(限定的な)ルールを先に記述後、適用範囲の広い(一般的な)ルールを記載するのが妥当。

  1. アクセス制御
  2. 外部向けリダイレクト
  3. 内部でのリライト

「テキスト圧縮の有効化」の対応方法

PageSpeed Insightsでサイト分析した時に「テキスト圧縮の有効化」の欄に以下の様に表示された場合の対応方法について記載します。
  • テキストベースのリソースは圧縮(gzip、deflate、またはbrotli)して配信し、ネットワークの全体的な通信量を最小限に抑えてください。
  • ウェブサーバーの設定でテキスト圧縮を有効にできます。

テキスト圧縮を有効にする方法

  • ウェブサーバー上の「.htaccess」ファイルへ下記記載を追加することでウェブサーバの出力データをGZIPで圧縮することによって、データの転送速度を向上させウェブサイトを速く表示させることができます。

注意事項

  • すでに圧縮済みのファイルにDEFLATEフィルタをかけるとパフォーマンスが低下するため、画像、動画、音声、ZIP、PDFファイル等にはDEFLATEフィルタは指定しない

修正例

  • 修正前
  • 修正後

Twitterの開発者アカウント申請時にTwitter側から質問事項がきました

当サイトで投稿した記事は公開時に自動ツイートされるように「WP to Twitter」というプラグインで設定していたのですが、いつの間にかtwitter側の仕様に変更がありプラグインを利用するにはtwitterの開発者アカウントの取得が必要になって申請していました。

申請後、以下の質問がtwitter側から送られてきたので、今後申請する方は下記事項を明確にして申請すれば一発で通りやすいかと思います。

  • Twitter APIを使用する中核的な使用目的、意図、ビジネス上の目的。
  • ツイート、Twitterアカウント、またはそのコンテンツを分析する場合は、実施する分析の内容と手法または技術について詳しくお教えください。 
  • ツイート、リツイート、いいねの使用が含まれる場合は、Twitterアカウントまたはそのコンテンツに対してどのような操作を行うのかをお教えください。
  • TwitterコンテンツをTwitter以外で表示する場合は、お客さまの製品またはサービスで、ツイートおよびTwitterコンテンツがどこにどのように表示されるかを、行レベルの表示か集計表示かを含めてご説明願います。

返信は日本語でしましたが、無事申請通りました(*^^*)

Javaのバージョンアップ手順

しばらくJavaのバージョンアップを実施してなかったのでバージョンアップ時の手順をメモしておきます。
今回はJava 1.6.0_45 ⇒1.8.0_331へバージョンアップしてみます。
※2022年5月時点でJavaの最新バージョンは18ですが開発で使用してるのは8なので今回最新版にはしてません。

jdkのダウンロード

  • Oracleの「Javaアーカイブ」ページからダウンロードする事が可能です。
    ダウンロードする場合Oracleアカウントが必要となります。
    ⇒Oracle Java Archiveページ

jdkのインストール手順

  1. インストールする前にまずは現在適用されているJavaのバージョンを確認します。コマンドプロンプトの画面で「javac -version」と入力すれば現在適用されているJavaのバージョンを確認できます。
  2. OracleのアーカイブページでJavaのバージョンを選択します。今回は「Java SE 8(8u211 and later)」を選択します。
  3. 次にjdkのインストーラーを選択します。今回は64ビット版の「jdk-8u331-windows-x64.exe」を選択します。
  4. ダウンロードした「jdk-8u331-windows-x64.exe」を実行してセットアップ画面の「次」ボタンを選択します。
  5. インストール先を変更したい場合は変更ボタンから指定してから「次へ」ボタンを選択します。
  6. インストールが終了するの以下の画面が表示されるので「閉じる」ボタンを選択します。
  7. コントロールパネル ⇒ システム ⇒ システムの詳細設定から環境変更を設定します。
  8. システム環境変数の「JAVA_HOME」を選択しjdkをインストールしたフォルダを指定します。
  9. 次にシステム環境変数の「Path」を選択肢jdkのフォルダが指定されている箇所を変更します。
  10. 環境変数の設定が完了したら再度コマンドプロンプト画面でJavaのバージョンを確認して値が変更されていればバージョンアップ作業完了です。

 

 

Excel:特定の値の時に行の色を変更する方法

Excelで特定の列の値が”完了”と入力された時などにその行の色を変更したいという事が、

資料を作成している時などよくあるので、条件付き書式を使用して簡単に設定する方法です。

条件付き書式で特定の値の時に行へ色をつける方法

以下の表の場合にD列の値が”完了”の場合に行の色を変更する方法です。

 

  1. 色を付けたい範囲を選択します。
  2. ホーム ⇒ 条件付き書式 ⇒ 新しいルールを選択します。
  3. 新しい書式ルールの画面で「数式を使用して、書式設定するセルを決定」を選択し、書式欄へ「=$D2=”完了”」と入力し、書式ボタンを押下して塗りつぶしする色を選択します。
  4. 書式と色を選択したらOKボタンを押下して設定完了です。以下のようにD列が”完了”となっている行のみ色が付くようになります。

Excel:スネークケースからキャメルケースへの変換方法

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 Tree-View」はemlファイルをバックアップしたけど既存のメールソフトだと混同して紛らわしいので
別のメールソフトでバックしたメールファイルを参照したい場合に便利なフリーソフトです。

仕様

項目内容
ソフト名 EML Tree-View
ライセンスフリーソフト
OSWindows

ダンロード先

特徴・用途

  • バックアップしたメールをサッと開きたい、検索したい。
  • メールのバックアップを随時とりたい。
  • バックアップしたメールを、期間ごとに整理したい。

使用方法

  1. ダウンロードした「EMLTreeView.zip」を展開して「EMLTreeView.exe」を実行します。
  2. メニューのファイル⇒フォルダを開くからemlファイルのバックアップフォルダを選択するだけ。
    「圧縮フォルダ(ZIP)を開く」を選択すればzipファイルからも開けます。