我得到了解决方案。
要使用 laravel 5.2 处理 MySQL 5.7.8 及更高版本,需要将 PDO 选项添加到 config/database.php 中的连接,如下所示。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'db_name'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'options' => array(
PDO::ATTR_CASE => PDO::CASE_LOWER,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => true,
PDO::ATTR_EMULATE_PREPARES => true,
),
],
然后运行 php artisan config:cache。
它运作良好。
vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php PDO 选项如下
protected $options = [
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
];
PDO::ATTR_STRINGIFY_FETCHES 和 PDO::ATTR_EMULATE_PREPARES 需要在 database.php 中覆盖。