2013-05-16 3 views
5

私は予約語のためのMySQLのマニュアルの言葉でこれらを見つけることができませんが、どうやらphpMyAdminには、彼らが予約していると言う:MySQLでは "type"と "status"は予約語ですか?

enter image description here

+0

実際に、これらの言葉への言及はマニュアルにはありません。しかし、それらは「意味」を持つ言葉であるため、その使用に制限があります。 私はこれらを使ってテーブルを作成しましたが、これを無視してテーブルを作成しても無視されません。 – PiLHA

+0

@PiLHA:要点*は引用符で囲まれていないSQL識別子としては使用できません。これらの言葉は*できます。 phpMyAdminは、これらの単語が予約されていることを示すには間違いです。 – eggyal

+0

@eggyal私が知る限り、両方のSQLServerでMySQLで発生します。この用語の使用に対する最大限の制限は、 'または'を加えて解決することです。バグかどうかは、使用してください。 – PiLHA

答えて

11

これは、技術的には、phpMyAdminのバグです。 libraries/sqlparser.data.phpから:

/** 
* words forbidden to be used as column or table name wihtout quotes 
* as seen in http://dev.mysql.com/doc/mysql/en/reserved-words.html 
* 
* @global array MySQL forbidden words 
*/ 
$PMA_SQPdata_forbidden_word = array (

(リストが参照マニュアルのページに明確ではありません'STATUS''TYPE'、含まれます)。

Bug #948このときphpMyAdminは、このリストから予約語として(誤って)特定されているため、特定の列名(STATUSを含む)を大文字にしています。これらのキーワードは、結果として、当初removedリストからだったが、それはコミットthe reasons explained by Alexander Turekため、その後reversedた:

あなたの問題を修正する修正プログラムをプリティプリンタを台無しに! これはむしろアナライザの問題です。

FIRSTとSTATUSは予約語配列 の中にあります。これらはMySQLコマンドの一部であるためです。 STATUSは、" SHOW STATUS "および ALTER sytaxの最初の部分で使用されています。

さらに、このバグは、 STATUSとFIRSTよりも多くの単語に影響します。 予約語配列からすべてを削除するとどうなるかわかりません...

変更されたため、両方のクエリがよく強調表示されません。

つまり、phpMyAdminは予約語を検出するのと同じように、かなりのプリンタで構文強調を行うために同じ単語リストを使用します。これは誤っており、あなたが守っている警告につながります。