MySQL проблема с русскими буквами «и» «ш»

При переносе или восстановлении БД mysql может возникнуть проблема с символами «и» «ш» из-за неправильной перекодировки.
Решение проблемы через ssh в одну строчку( в начале строки указать переменные DB_NAME DB_USER DB_PASS):

DB_NAME="Имя Базы";DB_USER="Имя Пользователя Базы";DB_PASS="Пароль Пользователя Базы";DB_CONNECT="mysql -N -u $DB_USER -p$DB_PASS $DB_NAME"; for i in `echo "show tables;" | $DB_CONNECT`; do for j in ` echo "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='$i'; " | $DB_CONNECT`;do echo "UPDATE $i SET $j = REPLACE($j, CONCAT( CHAR(209), CHAR(63) ), CONCAT( CHAR(209), CHAR(136) )); UPDATE $i SET $j = REPLACE($j, CONCAT( CHAR(208), CHAR(63) ), CONCAT( CHAR(208), CHAR(152) ) );" | $DB_CONNECT; echo $i ;done ;done

И красиво можно bash скриптом:


#!/bin/bash

DB_NAME="Имя Базы"
DB_USER="Имя Пользователя Базы"
DB_PASS="Пароль Пользователя Базы"
DB_CONNECT="mysql -N -u $DB_USER -p$DB_PASS $DB_NAME"

for i in `echo "show tables;" | $DB_CONNECT`
do
for j in `echo "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='$i';" | $DB_CONNECT`
do
echo "UPDATE $i SET $j = REPLACE($j, CONCAT( CHAR(209), CHAR(63) ), CONCAT( CHAR(209), CHAR(136) ));" | $DB_CONNECT
echo "UPDATE $i SET $j = REPLACE($j, CONCAT( CHAR(208), CHAR(63) ), CONCAT( CHAR(208), CHAR(152) ));" | $DB_CONNECT
done
echo $i
done

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>