-
はじめに
CSVファイルを扱っていると、「BOMあり」「BOMなし」という言葉を目にすることがあります。
特にExcelで開いたときに文字化けしてしまった経験がある方は、この違いが大きな意味を持つことを知っておくと便利です。
この記事では、BOMの基礎から、Excelやシステムでの扱い方、確認方法まで解説します。
BOMとは?
BOM(Byte Order Mark)は、テキストファイルの先頭に付与される特殊な「目印」です。
文字コードを示すために使われ、特にUTF-8では以下の3バイトがBOMになります。これがあるファイルを「BOMあり」、ないファイルを「BOMなし」と呼びます。
BOMありとBOMなしの違い
BOMあり
-
Excelなどで開くと文字化けしにくい
-
日本語環境のExcelではBOM付きの方が安全に扱える
BOMなし
-
Linux系のシステムやプログラムでは一般的
-
余計なバイトが含まれないためシステム連携や自動処理で好まれる
Sakuraエディタで違いが分からない理由
Sakuraエディタはとても優秀で、UTF-8のBOMがあってもなくても正しく解釈して表示します。
そのため、見た目では違いが分からないのです。
他のソフトでは「」のような文字が先頭に表示されることもありますが、Sakuraではそうした問題は起きません。
BOMの有無を確認する方法
1. Sakuraエディタで確認
-
メニュー → ファイル → 文字コード指定して開く
-
「UTF-8」または「UTF-8 (BOM付き)」が表示される
2. バイナリエディタで確認
-
BOMあり:ファイル先頭に
EF BB BF
-
BOMなし:すぐに「ID,名前,点数」などの内容が始まる
3. コマンドで確認
-
Windows (PowerShell)
→ BOMありなら
239 187 191
が表示されます -
Linux
→ BOMありなら
ef bb bf
が確認できます
利用シーン別の使い分け
利用シーン おすすめ設定 理由 ExcelでCSVを開く場合 BOMあり(UTF-8 BOM) 文字化けを防ぎ、正しく読み込める プログラムやLinux環境で処理 BOMなし(UTF-8) 不要なバイトがなく安定処理できる BOMの有無を確認したい場合 バイナリやコマンド 確実に判別可能
まとめ
CSVファイルの「BOMあり/なし」は目で見える違いはなく、特にSakuraエディタではどちらでも正しく開けます。
しかし、Excelでの文字化けやシステム連携時の不具合を避けるためには、利用シーンに応じた使い分けが重要です。-
Excel → BOMあり
-
プログラム処理 → BOMなし
ぜひ状況に合わせて正しく選択してください。
-
「ブログ」カテゴリーアーカイブ
ブログ投稿用のカテゴリ
Excel:半角・全角文字のチェック方法
Oracle:COALESCE関数の使い方
oracleの独自関数のCOALESCE(コアレス)関数の用途についてメモしておきます。
COALESCE関数とは
COALESCE関数は引数のリストから最初のNULL以外の値を返却するOracle独自関数となります。
NVL2関数との違いは必ずしも引数へ指定するデータ型を全て合わせる必要はないことです。
ただデータの一貫性を保ちたい場合は極力データ型は合わせた方が望ましいです。
サンプルテーブル
- サンプルテーブル「CLIENT_ADDRESS」
COALESCE関数の使用例
Oracle:NVL関数とNVL2関数の違い
oracleの独自関数としてNVL関数やNVL2関数があります。
知ってると結構便利な関数なので、この2つの関数の違いについて整理しておきます。
NVL関数とは
NVL関数は第1引数がNULLなら第2引数の値(代替値)を返します。
もし第1引数の結果がNULLでなければ、そのまま第1引数の値を返します。
注意点として第1引数と第2引数へは同じデータ型を指定する必要があります。
NVL関数の使用例
- サンプルテーブル「CLIENT_ADDRESS」
- SQL(クエリー)例
以下の例ではEND_DATEがNULLでない場合はEND_DATEの値を、NULLの場合はsysdateを返却します。1SELECT NVL(END_DATE, sysdate) FROM CLIENT_ADDRESS; - 実行結果
NVL2関数とは
NVL2関数は第1引数がNULLの場合に、第2引数の値を返却し、第1引数がNULLの場合は第3引数の値を返却します。
注意点として第1引数、第2引数、第3引数に指定する値は全て同じデータ型を指定する必要があります。
NVL2関数の使用例
INSERT文を指定回数分ループして実行する方法
性能試験などであるテーブルに大量データの作成が必要になった場合にINSERT文をループで処理できれば便利!という事で、SQLとロジックを組み合わせたストアドプロシージャでのサンプルプログラムとなります。
ストアドプロシージャ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
DECLARE -- 変数の宣言 counter NUMBER := 1; loop_limit NUMBER := 10; goods_id NUMBER := 1; BEGIN WHILE counter <= loop_limit LOOP -- 実行するSQL INSERT INTO USER1.GOODS (GOODS_ID,NAME,GOODS_CODE,PRICE) VALUES (goods_id,'パソコン',101,5000); -- インクリメント counter := counter + 1; -- カウンタをインクリメント goods_id := goods_id + 1; -- GOODS_IDをインクリメント END LOOP; -- 正常終了すれば自動的にCOMMITされるため明示的なCOMMITは不要。途中で失敗した場合は全件ロールバックされる -- DBクライアントソフトが自動コミットしない場合は明示的なCOMMITが必要 END; |
上記の例では、loop_limitに指定した件数分「GOODS」テーブルへレコードを追加するサンプルコードです。
上記の例では、loop_limit
を10としていますが、必要に応じて任意の数値に変更できます。
DBeaverで上記のストアドプロシージャを実行する場合は「SQLスクリプトを実行する」を選択することで正常に実行されます。
実行結果
Excel:文字列で入力済の値を数値形式へまとめて変換する方法
「お知らせ: メールボックスのサイズがクォータ制限に達しました」はフィッシングメールなのでご注意を!!
日頃からスパムメールの類には注意していたつもりでしたが、以下の様なメールが届いてフィッシングメールとは気付かずにリンクをクリックしてしまったので注意喚起として記載します。
メールの件名:「お知らせ: メールボックスのサイズがクォータ制限に達しました」
メール内容
ちゃんと見れば送信元のメールアドレスが疑わしいアドレスだったり、メールボックス制限に達してるのにメールが送られてきてたりと不審な点に気づくはずなんですが、このメールを見た瞬間はフィッシングメールと気付かず「メールクォータを変更する」をクリックしてしまい、メールアドレスが自動で入力しているPOPパスワードの入力を促す画面へ誘導されてしまいました。。
私の場合はPOPパスワードを忘れていてプロバイダへ連絡してみたら「そのようなメールは送っていないのでフィッシングメールなので削除して下さい」とご指摘頂いたので気付くことが出来ました。
皆様もご注意を^^;
Oracle:事前構成済の表領域
Oracleではデータベースを作成すると自動的に以下の表領域が作成されます。
事前構成済の表領域
表領域 説明
SYSTEM Oracleサーバーがデータベースを管理するために使用する表領域
SYSAUX SYSTEM表領域の補助表領域
TEMP データベースのデフォルトの一時表領域
UNDOTBS1 UNDO表領域
USERS 永続表領域
SYSやSYSTEMユーザー以外のユーザー用のデフォルト表領域
EXAMPLE データベース作成時に「サンプル・スキーマの作成」を指定すると作成される表領域
SQL:単語の先頭1文字目のみ大文字へ変更する方法
SQLで単語の先頭1文字目のみ小文字から大文字へ変更したい場合は、INITCAP関数を使用することで可能となります。引数に変換したい文字を指定すればOKです。単語の区切りはスペースかアルファベット以外の文字(ハイフン「-」、カンマ「,」、アンダースコア「-」など)を区切り文字として見做して変換されます。
DBMS毎の使用可否
- 一般的な以下のDBMSではINITCAP関数は使用可能です。
サンプルテーブル
INITCAP関数の使用例
SQL(クエリー)
1 2 |
SELECT INITCAP(g.NAME) FROM GOODS g; |
実行結果
Eclipse:スネークケース ⇔ キャメルケース変換方法
Eclipseでコーディングしている際、スネークケースとキャメルケースの切り替えはショートカットキーを利用することで簡単に実施出来ます。ローカル変数などを定義する際に結構便利な機能となります。
Eclipseのバージョンによっては使用出来ない可能性もあるのでご注意下さい。
環境
- Eclipse:ver 4.7.3