mysql2 supports both callback and promise-based APIs. Drizzle handles both:
import { drizzle } from 'drizzle-orm/mysql2';import mysql from 'mysql2'; // Note: not mysql2/promise// Callback-based poolconst pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'mydb',});// Drizzle automatically converts to promise-based APIconst db = drizzle(pool);
import { drizzle } from 'drizzle-orm/planetscale-serverless';import { Client } from '@planetscale/database';import * as schema from './schema';export const runtime = 'edge';const client = new Client({ host: process.env.DATABASE_HOST, username: process.env.DATABASE_USERNAME, password: process.env.DATABASE_PASSWORD,});const db = drizzle(client, { schema });export async function GET() { const users = await db.select().from(schema.users); return Response.json(users);}
PlanetScale doesn’t support foreign key constraints. Use mode: 'planetscale' with mysql2 driver when connecting to PlanetScale via standard MySQL protocol.
import { drizzle } from 'drizzle-orm/mysql2';import mysql from 'mysql2/promise';const pool = mysql.createPool({ uri: process.env.DATABASE_URL, connectionLimit: 10,});const db = drizzle(pool, { mode: 'default' });
Recommended: @planetscale/database
HTTP-based, no persistent connections
Optimized for PlanetScale infrastructure
Works in edge and serverless environments
Automatic SSL/TLS
import { drizzle } from 'drizzle-orm/planetscale-serverless';import { Client } from '@planetscale/database';const client = new Client({ host: process.env.DATABASE_HOST, username: process.env.DATABASE_USERNAME, password: process.env.DATABASE_PASSWORD,});const db = drizzle(client);
Recommended: mysql2 with PlanetScale modeFor serverless MySQL platforms without foreign key support:
import { drizzle } from 'drizzle-orm/mysql2';import mysql from 'mysql2/promise';const connection = await mysql.createConnection( process.env.DATABASE_URL);const db = drizzle(connection, { mode: 'planetscale', schema,});
PlanetScale connections are automatically encrypted:
import { drizzle } from 'drizzle-orm/planetscale-serverless';import { Client } from '@planetscale/database';const client = new Client({ host: process.env.DATABASE_HOST, username: process.env.DATABASE_USERNAME, password: process.env.DATABASE_PASSWORD, // SSL is enabled by default});const db = drizzle(client);