Я генерирую таблицы из классов в .NET, и одна проблема заключается в том, что у класса может быть имя поля, key
которое является зарезервированным ключевым словом MySQL. Как мне избежать этого в операторе создания таблицы? (Примечание: другая проблема ниже - текст должен быть фиксированного размера, чтобы быть индексированным / уникальным)
create table if not exists misc_info (
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
key TEXT UNIQUE NOT NULL,
value TEXT NOT NULL)ENGINE=INNODB;
Вы должны использовать символ обратной галочки (`), например:
create table if not exists misc_info ( id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, `key` TEXT UNIQUE NOT NULL, value TEXT NOT NULL)ENGINE=INNODB;
источник
Если вас интересует переносимость между разными серверами SQL, вам следует использовать запросы ANSI SQL. Экранирование строк в ANSI SQL выполняется с помощью двойных кавычек ("). К сожалению, этот метод экранирования не переносится в MySQL, если он не установлен в режиме совместимости с ANSI.
Лично я всегда запускаю свой сервер MySQL с аргументом --sql-mode = 'ANSI', поскольку это позволяет использовать оба метода для экранирования. Если вы пишете запросы, которые будут выполняться на сервере MySQL, который не был настроен / не контролируется вами, вот что вы можете сделать:
Включите их в следующие запросы MySQL:
SET @OLD_SQL_MODE=@@SQL_MODE; SET SESSION SQL_MODE='ANSI'; -- ANSI SQL queries SET SESSION SQL_MODE=@OLD_SQL_MODE;
Таким образом, единственные запросы, специфичные для MySQL, находятся в начале и в конце вашего .sql-скрипта. Если вы хотите отправить их на другой сервер, просто удалите эти 3 запроса, и все готово. Еще более удобно вы могли бы создать сценарий с именем: script_mysql.sql, который будет содержать указанные выше запросы настройки режима, создать сценарий script_ansi.sql и сбросить режим.
источник