SQL識別子移植性チェッカー
テーブル名・カラム名候補を1行ずつ貼り付け、PostgreSQL、MySQL、SQL Server、SQLiteのどれが拒否・黙って変更・異なる扱いをするか確認します。
ブラウザー内でローカルに処理します。ファイルがアップロードされることはありません。
使い方 ツール
- テーブル名、カラム名を1行に1つ、または複数貼り付けます。内容はブラウザー外へ送信されません。
- 「識別子を確認」を選びます。
- 各名称について影響する・しないデータベースと理由を確認します。
- 安全な書き換え案を使います。予約語との衝突や引用符の選択は判断が必要なため、ツールが一方的に決めません。
前提条件
- 1行につき識別子1つを受け取り、引用符なし、または各エンジン形式(ダブルクォート、バッククォート、角括弧)で囲まれた名前を扱います。SQLパーサーではなく、CREATE TABLE全体や複数カラム定義は解析しません。
- 対象はPostgreSQL、MySQL、SQL Server(T-SQL)、SQLiteです。
- 予約語一覧は文書化された一般的な衝突を選んだもので、各エンジンの完全な一覧ではありません。
出典と参考データ
方法論
6つの移植性問題を検査します:エンジン別予約語、大小文字処理(PostgreSQLは非引用名を小文字化、MySQLはOS/設定依存、SQL Serverは大文字小文字を区別せず保持、SQLiteは区別)、引用形式(ダブルクォート/バッククォート/角括弧)、長さ制限(PostgreSQL 63バイトで黙って切り詰め、MySQL 64文字、SQL Server 128文字、SQLiteに実用上の制限なし)、引用されていない不正文字、先頭アンダースコア規約。大小文字を小文字化し不正文字をアンダースコアへ置換する、機械的に明確な2ケースのみ提案し、予約語の改名や引用形式は選びません。
計算例
一部エンジンだけで予約語の語
入力項目: limit
結果: PostgreSQL、MySQL、SQLiteでは予約語ですが、SQL ServerにLIMIT句はなく(TOP/OFFSET-FETCHを使用)、予約語ではありません。影響する3エンジンを明示してエラーにします。
大小文字混在識別子
入力項目: CustomerOrder
結果: 引用符がない場合、PostgreSQLは`customerorder`へ黙って変換します。MySQL、SQL Server、SQLiteにはそれぞれ異なる規則があります。警告し安全な慣例として`customerorder`を提案します。
空白とハイフン
入力項目: customer order-id
結果: 4エンジンのいずれでも引用なし識別子として無効で、エンジンごとに異なる引用符が必要です。エラーとし、共通して安全な`customer_order_id`を提案します。
PostgreSQLのバイト上限を超える識別子
入力項目: an identifier whose encoded length exceeds 63 bytes
結果: PostgreSQLは63バイトを超える名前を切り詰めるため、異なる名前が衝突する可能性があります。マルチバイト文字ではバイト数と文字数は一致しない場合があります。このツールは厳選ルールを確認するもので、全識別子・全DB設定を網羅検証しません。
実用的なアドバイス
- 複数DBで使う可能性がある名称は小文字とアンダースコアのsnake_caseにすると大小文字差を避けられます。
- 予約語は引用符に頼らず避けてください。引用すると、そのエンジン固有の引用形式をすべてのクエリで使う必要があります。
- PostgreSQLが対象なら63文字を大きく下回る長さにしてください。63バイトでの黙った切り詰めは危険です。
よくある間違い
- 今テストするDBで予約語でなければ安全と思うこと。order、user、limit、key、indexなどはエンジン間で異なり、単一DBだけのテストでは隠れます。
- 引用符は万能の修正と思うこと。引用文字自体がDB固有なので、そのまま他DBへコピーすると解析されない場合があります。
- PostgreSQLの63バイトでの黙った切り詰めを見落とすこと。短縮名は動いて見えても長い名前同士が衝突します。
よくある質問
なぜ`limit`は3エンジンで指摘されSQL Serverでは指摘されない?
SQL ServerにLIMIT句はなく、TOPまたはOFFSET/FETCHを使うため、LIMITは予約されていません。PostgreSQL、MySQL、SQLiteはクエリ構文で使うため予約語です。
予約語を引用符で囲めば必ず直りますか?
この4エンジンでは通常使えますが、PostgreSQL/SQLiteはダブルクォート、MySQLはバッククォート、SQL Serverは角括弧と形式が異なります。他エンジンのSQLからそのままコピーできません。このツールは代わりを選ばず、各エンジンの形式を示します。
先頭アンダースコアは本当に問題ですか?
いいえ。軽微な情報として示すだけで、4エンジンのどれでも無効ではありません。PostgreSQL内部カタログやORMで慣例的に使われるため参考情報として表示します。
最終確認日: 2026-09-26
予約語表は各エンジンの既知の一般的な衝突を選んだもので網羅的ではありません。最終スキーマ前に各公式予約語一覧を確認してください。完全なSQL文ではなく、1行1識別子を処理します。
テーマとツールの設定、保存済みリストと最近使用したリストは、このブラウザー内にのみ保存されます。