Перевод сайта с windows-1251 на UTF-8 (дополнение)

Есть подробная инструкция как сменить кодировку сайта - перевести сайт на кодировку UTF-8

Но етсь неокторую ньюансы:

  1. Incorrect date value: '0000-00-00'
  2. Смешанная кодировка - наличие фалйов в кодировке UTF-8

1. Incorrect date value: '0000-00-00'

При изменении кодировки таблиц, может возникнуть проблема -

[22001][1292] Data truncation: Incorrect date value: '0000-00-00' for column 'DATE_MODIFY' at row 1

Решением может стать выполнение комнад (может потребоваться выполнение от пользваотеля root)

Посмотреть текущие значения можно так

SELECT @@GLOBAL.sql_mode global
SELECT @@GLOBAL.sql_mode global

Сохраняем текущее значение в переменную

SET @oldSqlModeSession = (SELECT @@SESSION.sql_mode SESSION);
SET sql_mode = '';

Далее выполняет ся конвертация кодировки таблицы

ALTER TABLE `db`.`b_vote` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
....

Затем восстанваливается значение режима

SET sql_mode = @oldSqlModeSession;

2. Перекодирвока файлов сайта в utf-8

В руководстве есть пример команды которая запустит перекодировку файлов, но там не учитывается тот момент что кодировка некоторых файлов уже может быть UTF-8, в результате конвертация таких файлов, в результате внутри вместо русских слов будут кракозября.

Решнием может стать размещение в корне сайта bash скрипта для конвертации. Нужно создать в корне сайта файл convert.sh с кодом приеденным ниже.

#!/bin/bash

file_pattern="*.php"

printf 'Start convert to encoding: UTF-8 , for all files: %s \n' "$file_pattern"

# ищем фацлы
files=`find . -name "${file_pattern}"`

counter=0;
for file_name in ${files}
do
((counter=counter+1))

## вернет формат файла
file_format=`file $file_name --mime-encoding | cut -d":" -f2 | sed -e 's/ //g'`


# каждую 1000 файлов выводит текущйи файл и счетчик обработанных файлов
if [ $((counter % 1000)) -eq 0 ]; then
echo 'process ' ${counter}
echo $file_name
fi

# echo $file_name
# echo $file_format

if [ $file_format == 'iso-8859-1' ] || [ $file_format == 'unknown-8bit' ]; then

file_tmp="${file_name}.tmp"

#Rename the file to a temporary file
mv $file_name $file_tmp

iconv -f CP1251 -t UTF-8 $file_tmp > $file_name

#Remove the temporary file
rm $file_tmp

# echo "File Name...: $file_name"
# echo "From Format.: $file_format"
# echo "To Format...: UTF-8"
# echo "---------------------------------------------------"

fi
done;

echo "Done!"

Далее делайем его исполняемым и запускаем

chmod +x convert.sh
./convert.sh

Аналогично нужно сделать для js файлов - можно сделать копию скрипта и в нем заменить маску для поиска php файлов на js и запутсить в нужных дирректориях, например шаблонах сайта

file_pattern="*.js"