Авторизация  
  • записи
    2
  • комментария
    3
  • просмотров
    9 135

HLstatsX и utf8mb4

hznovich

691 просмотр

Если служба hlstatsx (run_hlstats) падает со следующими ошибками:

DBD::mysql::db do failed: Incorrect string value: '\xF0\x9D\x93\x9C\xD1\x8F...' for column 'name' at row 1 at .//HLstats.plib line 198.
DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9D\x93\x9C\xD1\x8F...' for column 'lastName' at row 1 at .//HLstats.plib line 213.
Unable to execute query (player_flushdb_player_2):
...
Incorrect string value: '\xF0\x9D\x93\x9C\xD1\x8F...' for column 'lastName' at row 1 at .//HLstats.plib line 213.

или

DBD::mysql::st execute failed: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '=' at .//HLstats.plib line 185.
Unable to execute query:
                        SELECT
                                playerId
                        FROM
                                hlstats_PlayerNames
                        WHERE
                                playerId = 174669
                                AND name ='....'
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='

делаем следующее:

1. В файле HLStats.plib находим сточку: 

$db_conn->do("SET NAMES 'utf8'");

меняем на:

$db_conn->do("SET NAMES 'utf8mb4'");

2. Далее конвертируем базу:

создаем скрипт который конвертнет базу и таблицы:

#!/bin/bash
DATABASE="тут название базы"
MYSQL="mysql -uroot -pтут пароль -N --database=$DATABASE"
# convert database with all tables to utf8mb4
echo "ALTER DATABASE $DATABASE CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;" | $MYSQL

echo 'show tables' | eval $MYSQL | while read table
do
    echo "ALTER TABLE $table ROW_FORMAT=DYNAMIC;" |
        eval $MYSQL
    echo "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;" |
        eval $MYSQL

Если при конвертации будут какие-нибудь ошибки, то в конфигурационном файле mysql (mysqld.cnf) добавляем строчку:

sql-mode="NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

и запускаем скрипт еще раз.



0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти