Это общая проблема, возникающая при попытке создать таблицу с именами столбцов, использующих принятые в MySQL названия типов данных или функций, такие как TIMESTAMP или GROUP. Иногда это возможно (например, ABS является разрешенным именем для столбца), но не допускается пробел между именем функции и сразу же следующей за ним скобкой `(' при использовании имен функций, совпадающих с именами столбцов.
Следующие слова являются зарезервированными в MySQL. Большинство из них не допускаются в ANSI SQL92 как имена столбцов и/или таблиц (например GROUP). Некоторые зарезервированы для нужд MySQL и используются (в настоящее время) синтаксическим анализатором yacc:
| Слово | Слово | Слово |
| ADD | ALL | ALTER |
| ANALYZE | AND | AS |
| ASC | AUTO_INCREMENT | BDB |
| BERKELEYDB | BETWEEN | BIGINT |
| BINARY | BLOB | BOTH |
| BY | CASCADE | CASE |
| CHANGE | CHAR | CHARACTER |
| COLUMN | COLUMNS | CONSTRAINT |
| CREATE | CROSS | CURRENT_DATE |
| CURRENT_TIME | CURRENT_TIMESTAMP | DATABASE |
| DATABASES | DAY_HOUR | DAY_MINUTE |
| DAY_SECOND | DEC | DECIMAL |
| DEFAULT | DELAYED | DELETE |
| DESC | DESCRIBE | DISTINCT |
| DISTINCTROW | DOUBLE | DROP |
| ELSE | ENCLOSED | ESCAPED |
| EXISTS | EXPLAIN | FIELDS |
| FLOAT | FOR | FOREIGN |
| FROM | FULLTEXT | FUNCTION |
| GRANT | GROUP | HAVING |
| HIGH_PRIORITY | HOUR_MINUTE | HOUR_SECOND |
| IF | IGNORE | IN |
| INDEX | INFILE | INNER |
| INNODB | INSERT | INSERT_ID |
| INT | INTEGER | INTERVAL |
| INTO | IS | JOIN |
| KEY | KEYS | KILL |
| LAST_INSERT_ID | LEADING | LEFT |
| LIKE | LIMIT | LINES |
| LOAD | LOCK | LONG |
| LONGBLOB | LONGTEXT | LOW_PRIORITY |
| MASTER_SERVER_ID | MATCH | MEDIUMBLOB |
| MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
| MINUTE_SECOND | MRG_MYISAM | NATURAL |
| NOT | NULL | NUMERIC |
| ON | OPTIMIZE | OPTION |
| OPTIONALLY | OR | ORDER |
| OUTER | OUTFILE | PARTIAL |
| PRECISION | PRIMARY | PRIVILEGES |
| PROCEDURE | PURGE | READ |
| REAL | REFERENCES | REGEXP |
| RENAME | REPLACE | REQUIRE |
| RESTRICT | RETURNS | REVOKE |
| RIGHT | RLIKE | SELECT |
| SET | SHOW | SMALLINT |
| SONAME | SQL_AUTO_IS_NULL | SQL_BIG_RESULT |
| SQL_BIG_SELECTS | SQL_BIG_TABLES | SQL_BUFFER_RESULT |
| SQL_CALC_FOUND_ROWS | SQL_LOG_BIN | SQL_LOG_OFF |
| SQL_LOG_UPDATE | SQL_LOW_PRIORITY_UPDATES | SQL_MAX_JOIN_SIZE |
| SQL_QUOTE_SHOW_CREATE | SQL_SAFE_UPDATES | SQL_SELECT_LIMIT |
| SQL_SLAVE_SKIP_COUNTER | SQL_SMALL_RESULT | SQL_WARNINGS |
| SSL | STARTING | STRAIGHT_JOIN |
| STRIPED | TABLE | TABLES |
| TERMINATED | THEN | TINYBLOB |
| TINYINT | TINYTEXT | TO |
| TRAILING | UNION | UNIQUE |
| UNLOCK | UNSIGNED | UPDATE |
| USAGE | USE | USER_RESOURCES |
| USING | VALUES | VARBINARY |
| VARCHAR | VARYING | WHEN |
| WHERE | WITH | WRITE |
| YEAR_MONTH | ZEROFILL |
Следующие символы (из приведенной выше таблицы таблицы) не разрешены в ANSI SQL, но допускаются в MySQL как имена столбцов/таблиц. Это объясняется тем, что некоторые из этих имен являются словами естественного языка и уже использованы многими потребителями.
Материал из справочника по MySQL.
Комментарии