Сортировка импорта MySQL отличается, когда Exec от переполнения стека

Добрый вечер:

У меня есть скрипт php, который получает файл .sql, этот скрипт затем импортирует его в базу данных и вносит некоторые изменения в импортируемые данные. Это вызывает это (после перемещения загруженного файла):

shell_exec('nohup bash import.sh > import.log 2>&1 &');

В import.sh есть эта команда среди других:

mysql -h localhost -u x -px x < file_uploaded.sql

Когда я запускаю ‘nohup bash impor.sh> import.log 2>&1 &’из консоли он работает отлично, но при запуске из php-скрипта (nginx) он импортирует .sql с неправильной сортировкой с появлением странных символов.

1

Решение

Я предполагаю, что ваш входной файл закодирован в utf8. Если нет, измените кодировки ниже соответствующим образом.

Просто предположение, но, возможно, для скриптов, выполняемых PHP, неправильно LANG установлен или отсутствует и по умолчанию не utf-8. Попробуйте установить LANG явно в вашем import.sh:

export LANG="en_US.UTF-8" # or whatever your default locale is
mysql -h localhost -u x -px x < file_uploaded.sql

Кроме того, вы можете попробовать --default-character-set= опция для mysql:

mysql -h localhost -u x -px x --default-character-set=utf8 < file_uploaded.sql
1

Другие решения

Других решений пока нет …