Skip to content

MySQL Keyword Compatibility Reference

Generated for GSP Java version 4.1.0.8 on 2026-03-15

This page was generated using hybrid static extraction from parser source files combined with runtime validation against the actual GSP parser. Re-run the extraction script after parser updates to keep this page current.

Keyword-as-Column-Name Support

As of version 4.1.0.8, the GSP MySQL parser includes a lexer lookahead mechanism that allows 186 vendor-unreserved keywords to be used as unquoted column names in SELECT statements.

The lookahead pre-scans the token list before parsing and converts context-specific keywords to identifiers when they appear in column-name position:

  • After: SELECT, ,, DISTINCT, or ALL
  • Before: FROM, AS, WHERE, GROUP, ORDER, HAVING, LIMIT, UNION, INTERSECT, EXCEPT, INTO, ,, ), or ;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- Works: keyword as column name
SELECT add FROM t;

-- Works: keyword as column name
SELECT alter FROM t;

-- Works: keyword as column name
SELECT analyze FROM t;

-- Original keyword syntax also still works

Full Classification Overview

Out of 538 keywords recognized by the GSP MySQL parser:

Classification Count Description
Allowed 348 Can be used as an unquoted column name in both canonical contexts
Context-specific 189 Fails as SELECT keyword FROM t but works as SELECT t.keyword FROM t
Blocked 1 Cannot be used as an unquoted column name in either context

Context-Specific Keywords (189)

These keywords fail when used as bare column names (SELECT keyword FROM t) but succeed when table-qualified (SELECT t.keyword FROM t).

Keyword Reason
ADD Grammar keyword
ALL SELECT qualifier
ALTER Grammar keyword
ANALYZE Grammar keyword
AND Operator keyword
AS Grammar keyword
ASC Grammar keyword
BEFORE Grammar keyword
BETWEEN Operator keyword
BIGINT Type keyword
BINARY Type keyword
BLOB Type keyword
BOTH Grammar keyword
BY Grammar keyword
CALL Grammar keyword
CASCADE Grammar keyword
CASE Expression keyword
CHANGE Grammar keyword
CHARACTER Type keyword
CHECK Grammar keyword
COLLATE Grammar keyword
COLUMN Grammar keyword
CONDITION Grammar keyword
CONSTRAINT Grammar keyword
CONTINUE Grammar keyword
CREATE Grammar keyword
CROSS JOIN keyword
CURSOR Grammar keyword
DATABASES Grammar keyword
DAY_HOUR Grammar keyword
DAY_MICROSECOND Grammar keyword
DAY_MINUTE Grammar keyword
DAY_SECOND Grammar keyword
DEC Type keyword
DECIMAL Type keyword
DECLARE Grammar keyword
DELAYED Grammar keyword
DELETE Grammar keyword
DESC Grammar keyword
DESCRIBE Grammar keyword
DETERMINISTIC Grammar keyword
DISTINCT SELECT qualifier
DISTINCTROW SELECT qualifier
DOUBLE Type keyword
DROP Grammar keyword
EACH Grammar keyword
ELSE Grammar keyword
ELSEIF Grammar keyword
ENCLOSED Grammar keyword
ESCAPED Grammar keyword
EXISTS Operator keyword
EXIT Grammar keyword
EXPLAIN Grammar keyword
FETCH Clause keyword
FLOAT Type keyword
FLOAT4 Type keyword
FLOAT8 Type keyword
FOR Grammar keyword
FORCE Grammar keyword
FOREIGN Grammar keyword
FULLTEXT Grammar keyword
GET_FORMAT Grammar keyword
GRANT Grammar keyword
GROUP Clause keyword
HAVING Clause keyword
HIGH_PRIORITY Grammar keyword
HOUR_MICROSECOND Grammar keyword
HOUR_MINUTE Grammar keyword
HOUR_SECOND Grammar keyword
IF Expression keyword
IGNORE Grammar keyword
INDEX Grammar keyword
INFILE Grammar keyword
INNER JOIN keyword
INOUT Grammar keyword
INSERT Grammar keyword
INT Type keyword
INT1 Type keyword
INT2 Type keyword
INT3 Type keyword
INT4 Type keyword
INT8 Type keyword
INTEGER Type keyword
INTERVAL Type keyword
INTO Clause keyword
IS Operator keyword
ITERATE Grammar keyword
JOIN JOIN keyword
JSON_VALUE Grammar keyword
KEY Grammar keyword
KEYS Grammar keyword
KILL Grammar keyword
LEADING Grammar keyword
LEAVE Grammar keyword
LIKE Operator keyword
LIMIT Clause keyword
LINEAR Grammar keyword
LINES Grammar keyword
LOAD Grammar keyword
LOCK Grammar keyword
LONG Type keyword
LONGBLOB Type keyword
LONGTEXT Type keyword
LOOP Grammar keyword
LOW_PRIORITY Grammar keyword
MATCH Grammar keyword
MEDIUMBLOB Type keyword
MEDIUMINT Type keyword
MEDIUMTEXT Type keyword
MIDDLEINT Type keyword
MINUTE_MICROSECOND Grammar keyword
MINUTE_SECOND Grammar keyword
MODIFIES Grammar keyword
NATURAL JOIN keyword
NOT Operator keyword
NO_WRITE_TO_BINLOG Grammar keyword
NUMERIC Type keyword
OPTIMIZE Grammar keyword
OPTION Grammar keyword
OPTIONALLY Grammar keyword
OR Operator keyword
ORDER Clause keyword
OUT Grammar keyword
OUTER JOIN keyword
OUTFILE Grammar keyword
PRECISION Grammar keyword
PRIMARY Grammar keyword
PURGE Grammar keyword
RANGE Grammar keyword
READ Grammar keyword
READS Grammar keyword
REAL Type keyword
REFERENCES Grammar keyword
RENAME Grammar keyword
REQUIRE Grammar keyword
RESIGNAL Grammar keyword
RESTRICT Grammar keyword
RETURN Grammar keyword
REVOKE Grammar keyword
RIGHT JOIN keyword
SECOND_MICROSECOND Grammar keyword
SELECT Grammar keyword
SEPARATOR Grammar keyword
SET Grammar keyword
SHOW Grammar keyword
SIGNAL Grammar keyword
SMALLINT Type keyword
SPATIAL Grammar keyword
SQL Grammar keyword
SQLEXCEPTION Grammar keyword
SQLSTATE Grammar keyword
SQLWARNING Grammar keyword
SQL_BIG_RESULT Grammar keyword
SQL_BUFFER_RESULT Grammar keyword
SQL_CACHE Grammar keyword
SQL_CALC_FOUND_ROWS Grammar keyword
SQL_NO_CACHE Grammar keyword
SQL_SMALL_RESULT Grammar keyword
SSL Grammar keyword
STARTING Grammar keyword
STRAIGHT_JOIN Grammar keyword
TABLE Grammar keyword
TERMINATED Grammar keyword
THEN Grammar keyword
TINYBLOB Type keyword
TINYINT Type keyword
TINYTEXT Type keyword
TO Grammar keyword
TRAILING Grammar keyword
TRIGGER Grammar keyword
UNION Clause keyword
UNIQUE Grammar keyword
UNLOCK Grammar keyword
UNSIGNED Type keyword
UPDATE Grammar keyword
USE Grammar keyword
USING Grammar keyword
VARBINARY Type keyword
VARCHAR Type keyword
VARCHARACTER Grammar keyword
VARYING Grammar keyword
WEIGHT_STRING Grammar keyword
WHEN Grammar keyword
WHERE Clause keyword
WHILE Grammar keyword
WITH Clause keyword
WRITE Grammar keyword
YEAR_MONTH Grammar keyword
ZEROFILL Grammar keyword

Blocked Keywords (1)

These keywords cannot be used as unquoted column names in either context.

Keyword Workaround
FROM SELECT "from" FROM t

Workaround: Double-Quoted Identifiers

For any keyword that fails as an unquoted column name, you can use double-quoted identifiers:

1
2
3
4
5
-- Blocked or context-specific keyword as column name
SELECT "from" FROM t;

-- Or use table qualification for context-specific keywords
SELECT t.add FROM t;

Scope and Limitations

  • Tested contexts: SELECT keyword FROM t and SELECT t.keyword FROM t. Other contexts (DDL column definitions, INSERT column lists, aliases) may behave differently.
  • Version-specific: This report reflects GSP Java version 4.1.0.8.
  • Case sensitivity: Keywords are case-insensitive. select, SELECT, and Select are all treated the same.

How to Report Discrepancies

If you encounter a keyword that behaves differently from what this page describes, please report it through your support channel. Include:

  1. The exact SQL statement
  2. The GSP parser version
  3. Whether the same SQL works in MySQL

Methodology

  1. Static extraction: A Python script parses the lexer (.cod) and grammar (.y) source files to identify all 538 keywords and their grammar classifications.
  2. Runtime validation: A Java test harness validates every classification against actual TGSqlParser runtime behavior.
  3. JSON dataset: The authoritative data is stored in docs/generated/mysql_keyword_compatibility.json.