Значения HTML-таблицы для таблицы MySQL сразу [дубликат]

Это означает, что ваш код использовал ссылочную переменную объекта, которая была установлена ​​в нуль (т. е. она не ссылалась на экземпляр фактического объекта).

Чтобы предотвратить ошибку, объекты, которые могут быть пустыми, должны быть протестированы для null перед тем, как использовать.

if (myvar != null)
{
    // Go ahead and use myvar
    myvar.property = ...
}
else
{
    // Whoops! myvar is null and cannot be used without first
    // assigning it to an instance reference
    // Attempting to use myvar here will result in NullReferenceException
}
118
задан Jonathan Leffler 22 May 2010 в 22:52
поделиться

3 ответа

Если вы заинтересованы в переносимости между разными SQL-серверами, вы должны использовать SQL-запросы ANSI. К сожалению, этот метод экранирования не переносится в MySQL, если он не установлен в режиме совместимости с ANSI.

Лично я всегда запускаю свой MySQL-сервер с аргументом -sql-mode = 'ANSI', поскольку это позволяет использовать оба метода для экранирования. Если вы пишете запросы, которые будут выполняться на сервере MySQL, который не был настроен / контролируется вами, вот что вы может сделать:

  • Записать все ваши SQL-запросы в ANSI SQL
  • Заклинать их в следующих запросах 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 и сбросьте режим.

15
ответ дан Clement Cherlin 26 August 2018 в 18:44
поделиться
  • 1
    Отлично! Я могу написать запрос один раз и просто поставить переключатель для стеков MySQL! – ravemir 18 May 2015 в 11:51

Вы можете использовать двойные кавычки, если включен режим ANSI SQL

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; 

(Источник: Справочное руководство по MySQL, 9.3 Зарезервированные слова [ / д2])

144
ответ дан Martin Smith 26 August 2018 в 18:44
поделиться
  • 1
    ИМХО вы должны всегда указывать все имена полей и имена таблиц. – rjmunro 17 September 2013 в 12:50
  • 2
    @rjmunro - Это несколько более защитительно, так как защищает вас от новых зарезервированных ключевых слов, которые вводятся в более поздних версиях, но мне не нравится визуальный беспорядок. – Martin Smith 17 September 2013 в 13:02
  • 3
    То же самое исправление (двойная кавычка к побегу) также работает для ключевых слов в CQL Cassandra. Я знаю немного не по теме, но эта тема всплыла в поиске по Кассандре. – Godfrey Duke 26 February 2016 в 23:44
  • 4
  • 5
    @ Miha_x64 спасибо, обновлено. – Martin Smith 9 December 2017 в 17:04

Вы должны использовать символ обратного тика (`), например:

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;
59
ответ дан user 26 August 2018 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: