MySQLの予約語

Read More

MySQLです


テーブル名カラム名について少し気を付けなければならない点があります。


MySQLではいくつかの単語が予約語として登録されており、
これとかぶるテーブル名カラム名を使うには一手間必要になります。

一手間とは、
単語を'`'(バッククォート)で括る
です。


普段から'`'で括るクセがある人は何も問題ないのですが、
私のような横着者だとこれがとても面倒です。


--
下の例はどちらも正しく動作します。

・バッククォートを使ったINSERT文
INSERT INTO `example` (
  `id`,
  `subject`,
  `body`
) VALUES (
  1,
  '表題',
  '本文'
)



・バッククォートを使わないINSERT文
INSERT INTO example (
  id,
  subject,
  body
) VALUES (
  1,
  '表題',
  '本文'
)



--
・予約語となっているものの例(ほんの一部
TO、FROM、IF、GROUP、INDEX、KEY

当たり前ですがRDBMSを操作するSQL文は全部該当します。


・予約語についての公式ページ
http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html


--
今回この問題と遭遇したのはinsert時でした。
# 予約語とかぶっていたカラム名は'to'

今まで問題にならなかったのはたまたまか?


あと最近はベタなSQLではなく関数を利用して記述することが多いです。

関数を使ったSQL例
<?php
$sTableName = 'example';
$aryColumn = array(
  'id' => 1,
  'subject' => '表題',
  'body' => '本文',
);
insert($sTableName, $aryColumn);
?>



なので'`'はSQL用の関数に手を加えて対処するとします。
面倒だもん


Comments(1)

1  シラサヤ  2011/01/11 (火) 14:59 ID:XXXXXXXXX
-追記-
PostgreSQLでは表や列の名前に予約語と同じキーワードを使用したり、特殊記号を使う場合、「"」(ダブルクォート)を使いますが、MySQLでは「`」(バッククォート)を使うという独自仕様になっているようです。