語言無優劣,唯適合與否。本文通過**同一任務——連接 MySQL 查詢數據**——展示 C、C++、Python、Java、PHP、C# 六種語言的代碼風格、生態特點、環境搭建難易度,幫助開發者理解不同語言的「性格」。
package cn.example.mysql;
import java.sql.*;
public class JMysql {
private static final String URL = "jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASS = "123456";
private static final String SQL = "SELECT * FROM test";
public static void main(String[] args) {
try (Connection conn = DriverManager.getConnection(URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL)) {
while (rs.next()) {
System.out.printf("|%s|%s|%n", rs.getString("id"), rs.getString("name"));
}
} catch (SQLException e) {
System.err.println("Query failed: " + e.getMessage());
}
}
}
特點:JDBC 標準統一、連接池成熟、異常檢查強制、IDE 支持最強、Maven/Gradle 依賴管理極簡。
環境:JDK + Maven + mysql-connector-java jar。
#include
#include
#include
int main() {
MYSQL *conn = mysql_init(NULL);
if (!mysql_real_connect(conn, "localhost", "root", "123456", "test", 0, NULL, 0)) {
fprintf(stderr, "Connect failed: %s\n", mysql_error(conn));
return 1;
}
if (mysql_query(conn, "SELECT * FROM test")) {
fprintf(stderr, "Query failed: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
MYSQL_RES *res = mysql_store_result(conn);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
printf("|%s|%s|\n", row[0], row[1]);
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
編譯:`gcc -o mysql_test mysql_test.c $(mysql_config --cflags --libs)`
特點:手動管理連接/結果集內存、無異常機制需檢查返回值、適合嵌入式/高性能組件開發。
#include // MySQL Connector/C++ 8.0+ (X DevAPI)
#include
int main() {
try {
mysqlx::Session sess("localhost", 33060, "root", "123456");
auto schema = sess.getSchema("test");
auto table = schema.getTable("test");
auto result = table.select("id", "name").execute();
for (auto row : result) {
std::cout << "|" << row[0] << "|" << row[1] << "|\n";
}
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
特點:X DevAPI 現代化、RAII 自動資源管理、支持文檔存儲/事務、編譯需 CMake + Connector/C++ 庫。
import pymysql # 或 mysql-connector-python
conn = pymysql.connect(host='localhost', user='root',
password='123456', database='test', charset='utf8mb4')
try:
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM `test`")
for row in cursor.fetchall():
print(f"|{row[0]}|{row[1]}|")
finally:
conn.close()
特點:`pip install pymysql` 即用、上下文管理器自動關閉、動態類型靈活、數據科學生態無敵、GIL 限制高併發。
<?php
$mysqli = new mysqli('localhost', 'root', '123456', 'test');
if ($mysqli->connect_errno) {
die("Connect failed: " . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
$result = $mysqli->query("SELECT * FROM `test`");
while ($row = $result->fetch_assoc()) {
echo "|{$row['id']}|{$row['name']}|\n";
}
$result->free();
$mysqli->close();
?>
特點:內置 mysqli/PDO、請求結束自動釋放資源、部署最簡單、模板引擎豐富、異步支持弱 (Swoole/RoadRunner 改善中)。
using MySql.Data.MySqlClient;
using System;
class Program {
static void Main() {
string connStr = "Server=localhost;Database=test;Uid=root;Pwd=123456;Charset=utf8mb4;";
using (var conn = new MySqlConnection(connStr)) {
conn.Open();
using (var cmd = new MySqlCommand("SELECT * FROM `test`", conn))
using (var reader = cmd.ExecuteReader()) {
while (reader.Read()) {
Console.WriteLine($"|{reader["id"]}|{reader["name"]}|");
}
}
}
}
}
特點:`dotnet add package MySql.Data`、using 自動釋放、LINQ/EF Core ORM 強大、.NET 6+ 跨平台優秀、Visual Studio/Rider 體驗極佳。
| 維度 | C | C++ | Python | Java | PHP | C# |
|---|---|---|---|---|---|---|
| 代碼行數 | ~30 | ~20 | ~10 | ~25 | ~15 | ~20 |
| 環境搭建難度 | 高 | 高 | 極低 | 中 | 極低 | 低 |
| 內存管理 | 手動 | RAII/智能指針 | GC | GC | 請求級自動 | GC/using |
| 異常處理 | 返回值檢查 | try-catch | try-except | try-catch (受檢) | try-catch/錯誤碼 | try-catch |
| ORM/高級庫 | 無 | ODB/QtSql | SQLAlchemy/Django ORM | Hibernate/MyBatis/JPA | Eloquent/Doctrine | EF Core/Dapper |
| 部署複雜度 | 低 (靜態鏈接) | 中 | 中 (虛擬環境/容器) | 高 (JVM/容器) | 極低 | 中 (Runtime/容器) |
| 典型場景 | 嵌入式/底層庫 | 高性能服務/遊戲 | 數據科學/腳本/快速開發 | 企業級應用/微服務 | Web網站/CMS/中小項目 | 企業級/桌面/遊戲/雲原生 |
文中小說隱喻:
- 屬性 (金木水火土雷風) = 各語言特有範式/生態 (如 C 指針、Java OOP、Python 動態、PHP 請求級)
- 修煉 (汲取元素) = 學習語言特性、庫、最佳實踐
- 成神 (屬性消失、無職業) = 達到架構師級別:不再執着於語言,而是掌握通用原理 (設計模式、分佈式理論、數據庫原理、網絡協議、領域建模)
六種語言連接同一 MySQL,代碼風格迥異,折射出各自設計哲學。**沒有最好的語言,只有最適合場景的語言**。初學者建議從 Python/PHP 入門體驗「能跑起來」的成就感;工程師需掌握 1-2 門主流語言深耕;架構師則超越語言,關注系統本質。願各位在技術修煉路上,早日「成神」——無屬性,無邊界,只剩純粹的技術力量。