Sqlstate [hy000] [2054] сервер отправил кодировку, неизвестную клиенту. сообщите разработчикам

Я пытаюсь создать систему входа в систему в laravel. Я обновил env. файл с базой данных под названием kokodb. Однако, когда я запускаю этот код 'php artisan migrate' в cmd, я обнаружил следующую ошибку:

В строке 647 Connection.php:

SQLSTATE[HY000] [2054] Server sent charset unknown to t he client. Please, report to the developers (SQL: selec t * from information_schema.tables where table_schema = kokodb and table_name = migrations)

В строке 68 Connector.php:

SQLSTATE[HY000] [2054] Server sent charset unknown to t he client. Please, report to the developers

В строке 68 Connector.php:

PDO::__construct(): Server sent charset (255) unknown t o the client. Please, report to the developers

Не могли бы вы мне помочь. Больше нигде не нашел решения этой проблемы.

Какая это версия PHP и Laravel?

Travis Britz 26.10.2018 08:14

это была версия 5. а теперь это 7.2.11. но это не решает проблему

ALBADI 26.10.2018 09:23

Чтобы уточнить, это был PHP 5, а потом вы установили PHP 7.2.11? Если да, то подтвердили ли вы, что и ваш веб-сервер, и ваша командная строка теперь используют новую версию php?

Travis Britz 26.10.2018 09:29

ты нашел солоцию?

Adam Kozlowski 26.10.2018 11:18

Похоже, что обновление PHP решило проблему кодировки. однако теперь я сталкиваюсь с другой проблемой, когда пытаюсь выполнить миграцию. SQLSTATE [HY000] [2054] Сервер запросил метод аутентификации, неизвестный клиенту (SQL: выберите * из information_schema.tables, где table_schema = kokodb andtable_name = migrations).

ALBADI 26.10.2018 11:34
2
5
5 442
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Убедитесь, что у вас есть правильные параметры, когда дело доходит до базы данных в вашем файле .env. Вот сценарий для localhost:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_pass

После любых изменений в .env используйте php artisan config:cache в консоли

Также в config / database.php установлен

    'charset'     => 'utf8mb4',
    'collation'   => 'utf8mb4_unicode_ci',
    'modes'       => [
                'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_ENGINE_SUBSTITUTION',
            ],

Тогда также: php artisan config:cache

Удачи!

Я бы не рекомендовал config:cache во время разработки

Travis Britz 26.10.2018 08:30

Эй, чувак, ты бы не рекомендовал config: cache во время разработки? Может, вы нам повод дадите?

Adam Kozlowski 26.10.2018 08:31

Конечно, извините. Если вы используете конфигурацию кэширования уже, тогда да, вам нужно снова запустить config:cache (и во время развертывания). Для разработчиков, когда параметры конфигурации часто меняются, об этом шаге легко забыть (а преимущества оптимизации вашей локальной машины невелики). Это может привести к тому, что многие часы будут спрашивать: «Почему мои изменения не сработают?» виды отладки (первый раз). Я ожидаю, что в Stackoverflow будет много неопытных разработчиков Laravel, которые не помнят, что они запускали config:cache неделю назад, когда выполняли команды из предложенных исправлений. На одну выбоину меньше для них.

Travis Britz 26.10.2018 08:47
Ответ принят как подходящий

Какую версию PHP вы используете?

Согласно системе отслеживания ошибок PHP, это должно быть исправлено в версиях 7.0.19, 7.1.5 и 7.2.0.

https://bugs.php.net/bug.php?id=74461

В ссылках Аруна упоминается решение по замене кодировки сервера обратно на utf8, но utf8mb4 действительно предпочтительнее, потому что он предлагает полную поддержку юникода.

убедитесь, что вы сначала создали базу данных. тогда, Убедитесь, что у вас есть правильные параметры, когда дело доходит до базы данных в вашем файле .env. Вот сценарий для localhost:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306 (this can be different when database changed.)
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_pass

также запустите: php artisan config:cache очистить кеш.

это работает для меня .. удачи

<?php

$servername = "localhost";

$username = "root";

$password = "";



try{

    // servername and database name
    // my port no is 3307 check your's
    $conn = new PDO('mysql:host = $servername; dbname=project1; ', $username, $password );


    // set the PDO error mode
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected Successfully";

}
catch(PDOException $e){

    
    echo "Your Connection failed: ".$e->getMessage();
}


?>

Спасибо за этот фрагмент кода, который может оказать некоторую немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показывая, почему это хорошее решение проблемы, и сделает его более полезным для будущих читателей с другими, похожими вопросами. Измените свой ответ, чтобы добавить пояснения, в том числе сделанные вами предположения.

Syscall 16.03.2021 14:09

Если вы используете старую версию PHP (например, 5.6), вам необходимо понизить версию MySQL. Версия 5 работает нормально.

Однако, поскольку PHP 5.6 в настоящее время не поддерживается, вам следует обновить свой PHP и ваше приложение, если это необходимо.

Другие вопросы по теме