Lumen SQLSTATE ошибка при вставке символа в базу данных при utf8mb4 - PullRequest
0 голосов
/ 08 апреля 2019

У меня работает Lumen 5.8, и у меня есть таблица и база данных, в которую я хочу добавить игры, я использую это для своей миграции:

    Schema::create('games', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('slug');
        $table->string('name');
        $table->softDeletes();
        $table->timestamps();

        $table->charset = 'utf8mb4';
        $table->collation = 'utf8mb4_unicode_ci';
    });

Как видите, я установил кодировку исверка.

Также я добавил в .env:

DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci

enter image description here

ТАК, когда я пытаюсь добавить игру типа Pokémon

$game = new Game();
$game->slug = "pokemon-red"
$game->name = "Pokémon Red"
$game->save();

Я получаю

   SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE3\xA9mon-...' for column 'slug' at row 1 (SQL: insert into `games` (`slug`, `name`, `updated_at`, `created_at`) values (pokmon-white-version-2, Pokémon White Version 2, 2019-04-08 05:28:57, 2019-04-08 05:28:57))   

Я не уверен, почему я все еще получаю ошибку.Я могу вставить его непосредственно в поле в PHPMyAdmin без проблем, поэтому я предполагаю, что он как-то связан с Lumen.

Для справки я сначала нашел это, и поэтому все установлено в utf8mb4:

Невозможно вставить китайский язык в базу данных mysql через кодировку utf8 (предупреждение 1336 неверное строковое значение)

Я специально убедился, что нужно войти и вставить запись в PHPMyAdmin, и это сработало,что заставляет меня верить, что это проблема конфигурации Lumen.

1 Ответ

0 голосов
/ 25 июня 2019

Из комментариев я определил, что на самом деле имя не было закодировано так, как я думал.поэтому добавление

$game->name = utf8_encode("Pokémon Red");

Исправлено!

...