Есть подробная инструкция как сменить кодировку сайта - перевести сайт на кодировку UTF-8
Но етсь неокторую ньюансы:
- Incorrect date value: '0000-00-00'
- Смешанная кодировка - наличие фалйов в кодировке 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"