Вопрос по sql, mysql – Отключение строгого режима MySQL

6

Я сканирую 5000 CSV-файлов в базу данных. К сожалению, файлы имеют «a» для 0. Таким образом, когда я запускаю свой скрипт, он вылетает. Я слышал, что этой ошибки можно избежать, просто отключив строгий режим. Поэтому я попытался отключить строгий режим, чтобы разрешить мне читать пустую строку как 0 для моих числовых полей. Однако ошибка сохранилась.

То же самое можно сказать, что отключение строгого режима позволяет быть прочитанным в поле int? ('' - две кавычки, т.е. пустая строка)

Если так, то почему настройка

sql_mode = & APOS; & APOS;

в конфигурационном файле my.ini не решить проблему.

Спасибо!

Ваш Ответ

4   ответа
1

НАГРУЗКА ДАННЫХ ИНФИЛЬ Заявление о корректировке ценностей. Что-то в этом роде должно работать.

LOAD DATA INFILE 'filepath.csv'
INTO TABLE MyTable(Column1,@Col2,@Col3)
SET Column2=CASE WHEN @Col2 = '' THEN 0 ELSE @Col2 END
,Column3=CASE WHEN @Col3 = '' THEN 0 ELSE @Col3 END;

Этот запрос импортирует значение как есть в column1, и исправляет значения для столбцов 2 и 3. Используя это, вам не нужно отключать строгий режим, и вы фактически контролируете, какие данные поступают в вашу базу данных в состоянии исправить это надежным способом. Вы также можете использовать эту функцию, чтобы изменить форматы даты или импортировать шестнадцатеричные значения больших двоичных объектов. Очень полезная функция.

Хорошее решение. Я не знал, что в этот момент можно обработать поток данных.
0

так как у меня еще нет представителя, который прокомментирует ваш последующий вопрос о настройках, которые не "удерживают". Мой опыт работы с MySQL заключался в том, что настройки в файле конфигурации читаются только при запуске сервера, поэтому вам придется перезапустить сервер, чтобы новые настройки вступили в силу.

Сервер - это демон, с которым клиент командной строки связывается при запуске команд, поэтому перезапуск клиента командной строки фактически не перезапускает сам сервер.

Более подробное объяснение приводится в этом ответе:https://serverfault.com/a/79051.

17

LOAD DATA INFILE команда. Перед выполнением этой команды введите:

SET sql_mode = '';

Более подробную информацию о различных режимах SQL можно найти вдокументация.

Да вы правы. Это работает отлично. Я немного озадачен тем, почему настройка не сохранилась, но вызывал ее прямо перед тем, как сработала команда LOAD DATA. Благодарю. Orlan
ссылка мертваClick here for documentation и деталиServer SQL Modes
1

To disable strict SQL mode, SSH in to your server as root Create this file: /etc/mysql/conf.d/disable_strict_mode.cnf

Open the file and enter these two lines:

[mysqld] sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Restart MySQL with this command: sudo service mysql restart

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