2

mySQL に対して次のクエリを作成しました。

mysql> Create table R_Matrix 
       ( 
         image_name VARCHAR(25) NOT NULL REFERENCES Images(image_name), 
         Row INT, 
         Column INT, 
         Data INT, 
         PRIMARY KEY(image_name) 
       ); 

ここで、Images は同じデータベース内のテーブルで、image_name はその中の列です。

ただし、次のエラーが発生しました。

エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の「Column INT, Data INT, PRIMARY KEY(image_name) )」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

クエリに問題はありません。私は何を間違っていますか?

4

2 に答える 2

5

COLUMNは予約済みキーワードです。バックティックを使ってエスケープする必要があります。

Create table R_Matrix 
( 
    image_name VARCHAR(25) NOT NULL REFERENCES Images(image_name), 
    Row INT, 
    `Column` INT, 
    Data INT, 
    PRIMARY KEY(image_name) 
);
于 2013-01-12T16:26:18.873 に答える
3

The best option is to avoid using MySQL reserved words as identifiers. Since you are running a CREATE TABLE statement, changing the column name is the best solution. (Choose a different column name; or at a minimum, add an underscore to the end of the identifier.)

The problem with your statement (as JW correctly points out), is that COLUMN is a MySQL reserved word. Your statement is raising an error because MySQL is interpreting the token Column in your statement as a reserved word, rather than a column name; and, in that context, that reserved word is valid syntax.

A workaround (as JW also points out) to prevent MySQL as seeing that identifier as a reserved word is to enclose the identifier in backticks; alternatively, if sql_mode is set to ANSI, the identifier can be enclosed in double quotes.

于 2013-01-12T22:48:19.617 に答える