hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

各データベースで使える識別子

複数データベースに対応したシステムを作ってるとよくわからなくなるのでメモ。

こういう話題だとなにかと OracleANSI標準に沿わないと槍玉にあがるが、MySQLの方が意外と鬼っ子だったりする。

Oracle Database

  • 英字で始まる 英数(A-Z0-9)、アンダースコア(_)、ドル($)、シャープ(#)からなる文字列
  • 30バイト以内
  • 大文字/小文字の区別なし(大文字に正規化)
  • ダブルクォート("識別子")にてエスケープ可能

DB2

  • 英字で始まる 英数(A-Z0-9)、アンダースコア(_)からなる文字列
  • 128バイト以内
  • 大文字/小文字の区別なし(大文字に正規化)
  • ダブルクォート("識別子")にてエスケープ可能

SQL Server

  • 英字で始まる 英数(A-Z0-9)、アンダースコア(_)、アットマーク(@)、シャープ(#)からなる文字列
  • 128バイト以内
  • 大文字/小文字の区別はデータベースの照合順序次第
  • ダブルクォート("識別子")、角括弧([識別子])にてエスケープ可能

MySQL

  • 英数で始まる 英数(A-Z0-9)、アンダースコア(_)、ドル($)からなる文字列
  • 64バイト以内
  • 大文字/小文字の区別なし(ただし、一部の環境では混在不可)
  • バッククォート(`識別子`)にてエスケープ可能、後者は ANSI_QUOTES 有効時はダブルクォート("識別子") も可

PostgreSQL

  • 英字あるいはアンダースコアで始まる英数(A-Z0-9)、アンダースコア(_)、ドル($)からなる文字列
  • 64バイト以内(設定で変更可)
  • 大文字/小文字の区別なし(小文字に正規化)
  • ダブルクォート("識別子")、ユニコードクォート(U&"識\5225+005B50")にてエスケープ可能

*1

H2 Database

  • 英字あるいはアンダースコアで始まる英数(A-Z0-9)、アンダースコア(_)からなる文字列
  • 長さの制限なし
  • 大文字/小文字の区別なし
  • ダブルクォート("識別子")にてエスケープ可能

sqlite

  • 英字あるいはアンダースコアで始まる英数(A-Z0-9)、アンダースコア(_)からなる文字列
  • 長さの制限なし
  • 大文字/小文字の区別なし
  • ダブルクォート("識別子")、バッククォート(`識別子`)、角括弧([識別子])にてエスケープ可能

*1:1/19 ドル記号が抜けていたおり、また、ユニコードクォートによるエスケープ方法もあるため追記修正を行った。