I created a table as follows:
CREATE TABLE IF NOT EXISTS \'e!\' (
`aa` int(11) unsigned NOT NULL auto_increment,
`showName` TEXT NOT NULL default \'\',
`star
According to the docs, you can't:
Identifiers are converted to Unicode internally. They may contain these characters:
Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore) Extended: U+0080 .. U+FFFF
Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000: ASCII: U+0001 .. U+007F Extended: U+0080 .. U+FFFF
Source: http://dev.mysql.com/doc/refman/5.5/en/identifiers.html
Permitted characters in unquoted identifiers:
ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)
Extended: U+0080 .. U+FFFF
Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000:
ASCII: U+0001 .. U+007F
Extended: U+0080 .. U+FFFF
ASCII NUL (U+0000) and supplementary characters (U+10000 and higher) are not permitted in quoted or unquoted identifiers.
Identifiers may begin with a digit but unless quoted may not consist solely of digits.
Database, table, and column names cannot end with space characters.
Source: https://dev.mysql.com/doc/refman/8.0/en/identifiers.html
Quote your ambiguous or "special" table names with a back tick:
INSERT INTO `e!` ...
Or better, don't use special characters in table names to avoid such problems.
Try with this:
CREATE TABLE IF NOT EXISTS `e!` (
`aa` int(11) unsigned NOT NULL auto_increment,
`showName` TEXT NOT NULL default '',
`startDateTime` DATETIME NOT NULL ,
`endDateTime` DATETIME NOT NULL ,
PRIMARY KEY (`aa`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
This is Object Names standards for MySQL. According it you can't use "!" symbol as part of table name.
If you have whatever special requirements for the table identifiers, that means there is something wrong with your database architecture and/or with understanding database architecture.
You'd better correct these architectural mistakes instead of enforcing silly identifiers