Специальные символы в имени таблицы MySQL

Я создал таблицу следующим образом:

CREATE TABLE IF NOT EXISTS 'e!' (
`aa` int(11) unsigned NOT NULL auto_increment,
`showName` TEXT NOT NULL default '',
`startDateTime` DATETIME NOT NULL default '',
`endDateTime` DATETIME NOT NULL default '',
PRIMARY KEY  (`aa`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8

Затем попытался вставить с запросом:

INSERT INTO e! (showname, startDateTime, endDateTime) VALUES('E! News ', '2012-05-03 19:00:00', '2012-05-03 20:00:00')

И это ошибки из-за ! в имени таблицы, я предполагаю, что ! является специальным символом в mysql. Я попытался сбежать от него, но запрос все еще не удался.

Итак, могу ли я иметь специальные символы, такие как ! или & в имени таблицы? Если да, то мне, вероятно, придется каким-то образом закодировать их?

Спасибо.

Ответ 1

Введите свои двусмысленные или "специальные" имена таблиц с тиком обратной ссылки:

INSERT INTO `e!` ...

Или лучше, не используйте специальные символы в именах таблиц, чтобы избежать таких проблем.

Ответ 2

В соответствии с документами вы не можете:

Идентификаторы преобразуются в Unicode внутри. Они могут содержать эти символы:

  • Разрешенные символы в некотируемых идентификаторах: ASCII: [0-9, a-z, A-Z $_] (базовые латинские буквы, цифры 0-9, доллар, подчеркивание) Extended: U + 0080.. U + FFFF

  • Разрешенные символы в цитируемых идентификаторах включают в себя полную базовую многоязычную плоскость Unicode (BMP), за исключением U + 0000: ASCII: U + 0001.. U + 007F Extended: U + 0080.. U + FFFF

Источник: http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

Ответ 3

Попробуйте следующее:

    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

Ответ 4

Если у вас есть особые требования к идентификаторам таблиц, это означает, что что-то не так с вашей архитектурой базы данных и/или с пониманием архитектуры базы данных.

Лучше исправить эти архитектурные ошибки вместо того, чтобы применять глупые идентификаторы

Ответ 5

Вам нужны обратные тики вокруг e!

Кроме того, вашим datetime нужны значения по умолчанию, которые разрешены для datetime.

Ответ 6

Разрешенные символы в кавычках:

ASCII: [0-9, az, AZ $ _] (основные латинские буквы, цифры 0-9, доллар, подчеркивание)

Расширенный: U + 0080.. U + FFFF

Разрешенные символы в указанных кавычках включают полную базовую многоязычную плоскость Unicode (BMP), кроме U + 0000:

ASCII: U + 0001.. U + 007F

Расширенный: U + 0080.. U + FFFF

ASCII NUL (U + 0000) и дополнительные символы (U + 10000 и выше) не допускаются в кавычках или без кавычек.

Идентификаторы могут начинаться с цифры, но если они не указаны, они могут состоять не только из цифр.

Имена баз данных, таблиц и столбцов не могут заканчиваться пробелами.

Источник: https://dev.mysql.com/doc/refman/8.0/en/identifiers.html

Ответ 7

Это Имена объектов стандарты для MySQL. В соответствии с этим вы не можете использовать "!" символ как часть имени таблицы.