coppolafab / micro-laravel-mysql-driver
此包已被废弃,不再维护。未建议替代包。
对 Laravel 默认行为的最小扩展,以最小化连接到 MySQL 服务器后的交互。
v1.0.3
2021-03-30 15:10 UTC
Requires
- php: >=7.2
- ext-pdo: *
- illuminate/database: ^5.7|^6.0|^7.0|^8.0
- illuminate/support: ^5.7|^6.0|^7.0|^8.0
This package is auto-updated.
Last update: 2022-07-29 02:40:26 UTC
README
对 Laravel 默认行为的最小扩展,以最小化连接到 MySQL 服务器后的交互。兼容 Laravel 5.7+、6.x 和 7.x。
为什么?
set names ...语句仅影响服务器,可能导致涉及字符集的操作产生差异,特别是在启用预处理语句模拟时。
相反,通过 PDO DSN 设置连接字符集会影响客户端和服务器。- 在 PDO DSN 中声明连接数据库,可以自动选择数据库,而无需执行更多语句。
此外,一些连接代理不允许执行use ${dbname}语句。 set names ...语句在您需要为指定的字符集指定不同于服务器默认的校对时可能有必要。如果您可以坚持使用默认值(即对于 utf8mb4,在 MySQL 5.7 上是 utf8mb4_general_ci,在 MySQL 8.0 上是 utf8mb4_0900_ai_ci),则应取消设置database.connections.mysql.collation。- 此类配置语句可能导致代理上的连接固定。
- 当使用具有只读副本的集群时,任何既执行脚本又写入数据库的脚本处理两个连接。如果使用粘性,则只读处理程序将未使用且不必要地占用 MySQL 线程。
默认驱动和配置下的 MySQL 通用日志输出
2020-07-24T12:55:15.580117Z 3 Connect db_user@127.0.0.1 on db_schema using TCP/IP
2020-07-24T12:55:15.581060Z 3 Query use `db_schema`
2020-07-24T12:55:15.582896Z 3 Prepare set names 'utf8mb4'
2020-07-24T12:55:15.583003Z 3 Execute set names 'utf8mb4'
2020-07-24T12:55:15.583159Z 3 Close stmt
2020-07-24T12:55:15.583256Z 3 Prepare set session sql_mode='NO_ENGINE_SUBSTITUTION'
2020-07-24T12:55:15.583331Z 3 Execute set session sql_mode='NO_ENGINE_SUBSTITUTION'
2020-07-24T12:55:15.583448Z 3 Close stmt
2020-07-24T12:55:15.583531Z 3 Query select true
使用 micro 驱动程序下的 MySQL 通用日志输出
2020-07-24T12:51:18.507740Z 2 Connect db_user@127.0.0.1 on db_schema using TCP/IP
2020-07-24T12:51:18.509693Z 2 Query select true
可以设置所有 database.connections.mysql.collation、database.connections.mysql.strict 和 database.connections.mysql.timezone 为 NULL 来获得此结果。
有什么区别?
- 在 PDO DSN 中设置字符集。
- 不执行
use ${dbname}语句,从 PDO DSN 中读取。 - 除非您显式提供
database.connections.mysql.collation,否则不执行set names ...。 - 当使用具有只读副本的集群,并且
database.connections.mysql.sticky为 true 时,在切换到读写实例后立即关闭只读连接。
如何使用
- 运行
composer require coppolafab/micro-laravel-mysql-driver - 将数据库配置选项添加到 mysql 部分
'microOverrideDriver' => env('DB_MICROMYSQL_OVERRIDE_DRIVER', false), 'microCloseReadConnectionAfterWrite' => env('DB_MICROMYSQL_CLOSE_READ_CONNECTION_AFTER_WRITE', false), - 通过 .env 文件启用新配置选项
DB_MICROMYSQL_OVERRIDE_DRIVER=true DB_MICROMYSQL_CLOSE_READ_CONNECTION_AFTER_WRITE=true