php - 当 utf8mb4 时将符号插入数据库时​​ Lumen SQLSTATE 错误

标签 php mysql lumen

我正在运行 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:

Cannot insert chinese in mysql database through utf8 encoding ( Warning 1336 incorrect string value)

我特意确保进入 PHPMyAdmin 并插入一条记录,它起作用了,这让我相信这是 Lumen 配置问题。

最佳答案

根据评论,我确定该名称实际上并未像我想象的那样进行编码。所以添加

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

问题已解决!

关于php - 当 utf8mb4 时将符号插入数据库时​​ Lumen SQLSTATE 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55569142/

相关文章:

mysql - 奇怪的having和groupby子句行为生成 "Unknown column in 'having'子句“错误

php - 在 OpenCart 中通过 AJAX 加载产品内容

php - 流明共享 Controller

laravel - 除了标准 AES-128、AES-256 之外,我如何在 Laravel 中使用其他密码?

c# - 动态创建FTP用户

php - paypal IPN发送两次不同的两次

mysql - Rails 3 MySQL 2 报告看起来有效的 SQL 语法错误

php - 如何在 laravel 的含咖啡因模块中修复 '/'

php - 选择特定的重复数据库值并显示计数

php - 我可以使用 Lumen 在中间件中获取当前路线信息吗?