2020年6月5日

MySQLでテーブル名などに使用してはいけない「予約語」について

DBに接続できない。DBの内容が表示されない。またまた発生した、簡単そうで抜け出せないバグ地獄。

DBからデータを呼び出すための記述はいつもと変わらないにも関わらず、エラーが発生する。selectだけのシンプルなSQLでもエラー。同じソースで他サイトならエラーにならないのに、このサイトではエラーが発生する。そんな時に調べて調べて1時間。どうやらMySQLには「カラム名」「テーブル名」に使用してはいけない「予約語」というものがあるらしく。これに気付かずハマってしまうとなかなか抜け出ることが出来ないやっかいモノ。

MySQLでどうしてもエラーが解決できない場合、以下いずれかの単語をテーブル名もしくはカラム名に使用していないかチェックして、使用している場合はリネームしましょう。何らかの理由でリネームが難しい場合は、以下のようにバッククォート( ` )で囲めばエラーを回避して使用することは可能です。

select * from `column`

それでは予約語を確認してみましょう。「column」や「order」、「delete」など、知らないと使ってしまいそうな名称が結構あります。

予約語一覧

ADD
ALL
ALTER
ANALYZE
AND
AS
ASC
BEFORE
BETWEEN
BIGINT
BINARY
BLOB
BOTH
BY
CASCADE
CASE
CHANGE
CHAR
CHARACTER
CHECK
COLLATE
COLUMN
COLUMNS
CONSTRAINT
CONVERT
CREATE
CROSS
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
DATABASE
DATABASES
DAY_HOUR
DAY_MICROSECOND
DAY_MINUTE
DAY_SECOND
DEC
DECIMAL
DEFAULT
DELAYED
DELETE
DESC
DESCRIBE
DISTINCT
DISTINCTROW
DIV
DOUBLE
DROP
DUAL
ELSE
ENCLOSED
ESCAPED
EXISTS
EXPLAIN
FALSE
FIELDS
FLOAT
FLOAT4
FLOAT8
FOR
FORCE
FOREIGN
FROM
FULLTEXT
GRANT GROUP
HAVING
HIGH_PRIORITY
HOUR_MICROSECOND
HOUR_MINUTE
HOUR_SECOND
IF
IGNORE
IN
INDEX
INFILE
INNER
INSERT
INT
INT1
INT2
INT3
INT4
INT8
INTEGER
INTERVAL
INTO
IS
JOIN
KEY
KEYS
KILL
LEADING
LEFT
LIKE
LIMIT
LINES
LOAD
LOCALTIME
LOCALTIMESTAMP
LOCK
LONG
LONGBLOB
LONGTEXT
LOW_PRIORITY
MATCH
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MIDDLEINT
MINUTE_MICROSECOND
MINUTE_SECOND
MOD
NATURAL
NOT
NO_WRITE_TO_BINLOG
NULL
NUMERIC
ON
OPTIMIZE
OPTION
OPTIONALLY
OR
ORDER
OUTER
OUTFILE
PRECISION
PRIMARY
PRIVILEGES
PROCEDURE
PURGE
RAID0
READ
REAL
REFERENCES
REGEXP
RENAME
REPLACE
REQUIRE
RESTRICT
REVOKE
RIGHT
RLIKE
SECOND_MICROSECOND
SELECT
SEPARATOR
SET
SHOW
SMALLINT
SONAME
SPATIAL
SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT
SSL
STARTING
STRAIGHT_JOIN
TABLE
TABLES
TERMINATED
THEN
TINYBLOB
TINYINT
TINYTEXT
TO
TRAILING
TRUE
UNION
UNIQUE
UNLOCK
UNSIGNED
UPDATE
USAGE
USE
USING
UTC_DATE
UTC_TIME
UTC_TIMESTAMP
VALUES
VARBINARY
VARCHAR
VARCHARCTER
VARYING
WHEN
WHERE
WITH
WRITE
X509
XOR
YEAR_MONTH
ZEROFILL

予約語一覧(MySQL 4.0)

CHECK
FORCE
LOCALTIME
LOCALTIMESTAMP
REQUIRE
SQL_CALC_FOUND_ROWS
SSL
X509
XOR

予約語一覧(MySQL 4.1)

BEFORE
COLLATE
CONVERT
CURRENT_USER
DAY_MICROSECOND
DIV
DUAL
FALSE
HOUR_MIXROSECOND
MINUTE_MICROSECOND
MOD
NO_WRITE_TO_BINLOG
SECOND_MICROSECOND
SEPARATOR
SPATIAL
TRUE
UTC_DATE
UTC_TIME
UTC_TIMESTAMP
VARCHARACTER

以上、MySQLで使用してはいけない「予約語」についてでした。

コメントを残す

メールアドレスが公開されることはありません。