[轉]PHP 8.2 Remove libmysql mysqli
https://m.facebook.com/story.php?story_fbid=10216824504164331&id=1815507975
《 PHP RFC: Remove support for libmysql from mysqli 》
» https://wiki.php.net/rfc/mysqli_support_for_libmysql
PHP 核心開發團隊投票通過移除 mysqli 的 libmysql 支援,將於 PHP 8.2 正式生效。這項討論從農曆年前關注到年後,最終於 2022/2/5 全數投票通過。
對於一般 PHP 開發者是好事,不用再考慮 MySQL 是選擇 libmysql 還是 mysqlnd;面試時也減少面試官詢問兩者差異的比較 (不過現在很多面試官也不知道了)。
如果想瞭解 libmysql / mysqlnd 的優缺點,官方 RFC 也貼心地條列整理了。不過 RFC 裡沒提關於「License (授權)」的考量,特別在商業上。這也是 PHP 與 Python 及 Ruby 等社群有著不太一樣的生態考量。
Python 要連結 MySQL,通常選用 MySQL Connector 或 MySQLdb,但這兩者底層都依賴 libmysqlclient (MySQL C Library),而 libmysqlclient 的授權 [1] 主要採用 GPL-2.0,進而連帶影響了整體產品/專案的授權。
Ruby 要連結 MySQL,通常選用 mysql2,而其底層同樣依賴 libmysqlclient,有著同樣的潛在商業問題。
更重要的是 libmysqlclient 背後的公司是 Oracle。
但為什麼 PHP mysqlnd 沒有此問題?因為 mysqlnd 不依賴 libmysqlclient 而採用純 PHP extension 開發,授權採用 PHP License,在商業上避免了許多不必要的麻煩。
Python 其實也有不依賴 libmysqlclient 的 PyMySQL [2],Ruby 則有 mysql-rb [3],但效能大多不如 libmysqlclient 的實現。不像 PHP mysqlnd 在效能上大多勝於或接近 libmysql。
當然,Python 或 Ruby 若要不犧牲效能繼續採用 MySQLdb 或 mysql2,也是有替代方案的。
[1] https://dev.mysql.com/downloads/c-api/ [2] https://github.com/PyMySQL/PyMySQL [3] https://github.com/kirs/mysql-rb