
PlanetScale is now available on the Google Cloud Marketplace
We’re excited to announce that PlanetScale is now available on the Google Cloud Marketplace.


Character sets and collations in MySQL
Understanding the differences between character sets and collations in MySQL.

Changelog
Go to changelog
Integrate Cloudflare Workers with PlanetScale
A guide on how to natively integrate your PlanetScale database into Cloudflare workers easily and securely.


Backward compatible database changes
Learn about safely using the expand, migrate, and contract pattern to make database schema changes without downtime and data loss.


Why isn’t MySQL using my index?
There are several reasons why MySQL might not consider your index, and in this article we’ll explore some of the most common ones.


Serverless Laravel applications with AWS Lambda and PlanetScale
Learn how to create serverless Laravel applications by deploying them to AWS Lambda and using PlanetScale as the database.


Build a Rust API with Rocket, Diesel, and MySQL
Learn how to build a Rust API using Rocket, Diesel, and a MySQL database hosted on PlanetScale.


Database branching: three-way merge for schema changes
Learn how PlanetScale uses Git-like three-way diff to resolve schema change conflicts across database branches.


Query performance analysis with Insights
You can now use Insights to view time-series performance data on a per-query pattern basis.


Pagination in MySQL
An overview of the different ways to paginate in MySQL including limit/offset pagination and cursor pagination plus the pros and cons of each.


Safely making database schema changes
How to prevent schema changes from being scary with database best practices and PlanetScale.

Pinned posts

Increasing PlanetScale plan limits to include billions of reads
PlanetScale’s Scaler plan includes 100 billion reads for $29/month.


Building PlanetScale with PlanetScale
How PlanetScale uses database branching and non-blocking schema changes to build PlanetScale.


How does database sharding work?
Learn what sharding is, how sharding works, and some common sharding frameworks and tools.


An update to our workflow: safe migrations
Learn about our latest update, safe migrations, and how it affects our branching workflow.


Announcing the PlanetScale GitHub Actions
Easily integrate common PlanetScale operations directly into your GitHub Actions Workflows.


How to read MySQL EXPLAINs
Learn how to read the output in MySQL EXPLAIN plans so you can utilize them to improve query performance.


Connection pooling in Vitess
Connection pooling reduces the overhead of establishing new database connections. Learn how connection pooling works and how it is handled in Vitess.


How to upgrade from MySQL 5.7 to 8.0
Learn what you should look out for when upgrading an existing database from MySQL 5.7 to 8 and how to change your database to be compatible with the new version.


Zero downtime Rails migrations with the PlanetScale Rails gem
Learn about the Ruby on Rails workflow that protects your database and application from accidental downtime and data loss.


Build a products listing application with Golang and MySQL
Learn how to build a products listing application with Golang and a MySQL database.


Introducing the Issues Calendar for GitHub Projects
Use this open source GitHub integration to view your GitHub project issues in a customizable calendar.


Build a user management API with Nest.js and MySQL
Learn how to build a Nest.js API, connect it to a MySQL database, add a schema and data, and and run database queries.


Using MySQL with SQLAlchemy: Hands-on examples
Learn how to using SQLAlchemy with MySQL by working through an example of creating tables, inserting data, and querying data with both raw SQL and SQLAlchemy ORM.


Improvements to database branch pages
Learn about some of the latest enhancements we made to the Branching page in the PlanetScale dashboard.


Announcing Vitess 16
Vitess 16 is now generally available with updates to VDiff v2, VTOrc, MySQL compatibility, and more.


What are the disadvantages of database indexes?
Learn about some of the possible downsides of using database indexes and how to remove unused database indexes in MySQL.


Migrating from Postgres to MySQL
Learn how to migrate from Postgres to MySQL, Postgres vs MySQL incompatibilities, and more.


Introducing the PlanetScale API and OAuth applications
Manage your databases programmatically with the PlanetScale API.



Common MySQL errors and how to fix them
An overview of some common MySQL error codes you may run into, what they mean, and how to solve them.


What is the N+1 query problem and how to solve it?
Learn what the N+1 queries problem is by working through an example N+1 query, updating it to a JOIN statement, and going over how to identify them in the future.


Support’s notes from the field
A quick glimpse on Support at PlanetScale and the issues we see the most often.


Solving N+1’s with Rails `exists?` queries
Learn how to solve your Rails applications N+1’s caused by `exists?` queries.


Faster MySQL with HTTP/3
In this article, we explore how our HTTP/3 API compares to the latency of a traditional MySQL client.


What is a query planner?
Learn how query planning works and why query planners are important.


Temporal workflows at scale: Part 2 — Sharding in production
Learn how PlanetScale simplifies the process of running Temporal in production by looking at how our customer runs heavy production workloads.


Rails’ safety mechanisms
A comprehensive overview of Rails’ many safety features that can help you prevent painful mistakes.


Building a multi-region Rails application with PlanetScale
Learn how to configure your database in a multi-region Rails application to decrease latency across the globe.


Secure your connection string with AWS KMS
Learn how to encrypt your connection strings so that not even AWS can access them.


All of the tech PlanetScale replaces
PlanetScale is more than just a drop-in replacement for MySQL. Learn about everything PlanetScale can do for you.


PlanetScale and HIPAA
PlanetScale can now enter into Business Associate Agreements (BAA) with Single-tenant customers.


How PlanetScale Boost serves your SQL queries instantly
Learn how we use a partial materialization engine for database caching alongside your database.


Introducing PlanetScale Boost
Up to 1,000× faster queries in just a few clicks with our groundbreaking caching technology.


One million connections
Learn how to use PlanetScale to safely include your database in your serverless functions without hitting connection limits in MySQL.


MySQL Integers: INT, BIGINT, and more
Gain a deeper understanding of the MySQL integer types by exploring the different options (INT, BIGINT, MEDIUMINT, etc) and how they are stored.


Announcing Vitess 15
Vitess 15 is now generally available with updates to VTOrc, VTAdmin, MySQL compatibility, and more.


Vitess for the rest of us
How Vitess can increase your database‘s resilience, scalability, and performance


Laravel’s safety mechanisms
A comprehensive overview of Laravel’s many safety features that can help you prevent painful mistakes.


Optimizing queries in arewefastyet
Learn how we detected and optimized two slow queries in arewefastyet using PlanetScale Insights.



Introduction to MySQL joins
Learn how and when to use inner joins, outer joins, left joins, and right joins.


Indexing JSON in MySQL
Learn how to index JSON in MySQL with generated columns and functional indexes.


MySQL data types: VARCHAR and CHAR
In this entry of the series, we explore using VARCHAR and CHAR data types in your database and give some pointers on which type is best to use and when.


Debugging database errors with Insights
Learn about the new PlanetScale Insights database errors feature.


The MySQL JSON data type
Learn what the MySQL JSON data type is, when to use MySQL JSON, and some caveats to using JSON documents in relational databases.


Using the PlanetScale serverless driver with AWS Lambda functions
Learn how to use the PlanetScale serverless driver by creating a serverless API in AWS with JavaScript.


Declarative MySQL schemas with Atlas CLI
Learn how to use Atlas CLI with PlanetScale to define your database as code.


Build a multi-stage pipeline with PlanetScale and AWS
Learn how to build an automated DevOps pipeline with AWS Lightsail, CodeBuild, and PlanetScale.


TAOBench: Running social media workloads on PlanetScale
Learn how we used TAOBench with PlanetScale to benchmark social media workloads


Gated Deployments: addressing the complexity of schema deployments at scale
We just introduced a new feature, Gated Deployments, that gives you more control over when your schema changes deploy.


One million queries per second with MySQL
Discover how PlanetScale handles one million queries per second (QPS) with horizontal sharding in MySQL


Zero downtime Laravel migrations
Learn how to run no downtime non-blocking schema migrations in your production Laravel app with PlanetScale.


Run SQL script files on a PlanetScale database
Learn how to run commands in batch against a PlanetScale database using the PlanetScale CLI.


How product design works at PlanetScale
Learn about the lightweight and highly collaborative process our product design team follows to ship quickly at PlanetScale.


Introducing the PlanetScale serverless driver for JavaScript
You can now use PlanetScale in HTTP-only environments, like Cloudflare Workers, Vercel Edge Functions, and Netlify Edge Functions



Introducing FastPage: Faster offset pagination for Rails apps
Introducing FastPage, a new gem for ActiveRecord that speeds up deep pagination queries.


How to kill Sidekiq jobs in Ruby on Rails
Learn how PlanetScale uses a custom middleware to kill our Sidekiq jobs in production without relying on deploys.


Replace your Django database with PlanetScale
Learn how to swap out an existing Django database and replace it with a PlanetScale database.


Database DevOps
Learn how PlanetScale enables databases to seamlessly fit into the DevOps lifecycle.


Connect to a MySQL database in Python
Connect a Python app to MySQL database with mysqlclient, mysql-connector-python, PyMySQL, and aiomysql.


How PlanetScale prevents MySQL downtime
Learn how PlanetScale protects against downtime due to human error, system immaturity, and app issues.


Ruby on Rails: 3 tips for deleting data at scale
Learn how to delete data in large Rails apps with destroy_async, delete, destroy, and scheduled cron jobs.


The Slotted Counter Pattern
Handle MySQL increment counter bursts with the Slotted Counter Pattern


Behind the scenes: How we built Password Roles
Learn how we leveraged Vitess ACLs and VTTablet to build our password roles functionality


Safely dropping MySQL tables
Learn about how we’re making it safer to drop tables and easier to detect if they’re still in use.


Temporal Workflows at scale with PlanetScale: Part 1
Learn how to create a more reliable workflow with Temporal and PlanetScale


Announcing Teams: An easier way to manage database administrator access
Learn how you can manage database access with Teams and Directory Sync


We now display PlanetScale system status directly in your dashboard
Learn about how we built the new in-app system status using Vercel edge functions and StatusPage


How do database indexes work?
Learn how database indexes work under the hood and how they can be used to speed up queries


Getting started with the PlanetScale CLI
Learn how to quickly get up and running with the PlanetScale CLI.


Consensus algorithms at scale: Part 8 - Closing thoughts
In the final installment of the consensus algorithm series, we pull everything together with some final thoughts.


Deploy requests now alert on potential unwanted changes
We’ve updated our Deploy Request UI to alert when a schema change could produce unintended changes


Announcing the PlanetScale and Hashnode July Hackathon
Build an open-source project and compete for $20,000 in prizes and swag!


Consensus algorithms at scale: Part 7 - Propagating requests
In part 7 of the Consensus algorithm series, we combine everything we’ve worked at to cover propagating requests


Identifying slow Rails queries with sqlcommenter
Learn how to use sqlcommenter with Rails



Announcing Vitess 14
Learn about what was just released in Vitess 14


Grouping and aggregations on Vitess
Vitess is a database proxy that creates an illusion of a single database, when in reality the query is sent to multiple MySQL instances.


Consensus algorithms at scale: Part 6 - Completing requests
In part 6 of the Consensus algorithms series, we look at how to handle request completions


Introducing PlanetScale Insights: Advanced query monitoring
Insights gives you a faster way to debug and monitor your PlanetScale database queries


Extract, load, and transform your data with PlanetScale Connect
Use PlanetScale connect to easily perform ELT (Extract, Load, Transform) actions on your data to fulfill your application needs.


Introducing PlanetScale Portals: Read-only regions
Put your data where your users and applications are.


Why we wrote the PlanetScale “Future Database” principles
We believe databases are lagging behind DevOps innovation and we wrote these principles to illustrate the path forward.


The operational relational schema paradigm
An exploration of the current landscape of schema change methodology and what the future should look like.


Feature storytelling with Framer Motion
Learn how we used Framer Motion to create our schema revert feature’s narrative animation.


Consensus algorithms at scale: Part 5 - Handling races
In part 5 of our consensus algorithms series, we discuss how we handle race conditions and forward progress requirements.


Consensus algorithms at scale: Part 4 - Establishment and revocation
In part 4 of the consensus algorithms series, we look at how algorithm leaders are established and revoked.


Generics can make your Go code slower
Go 1.18 is here, and with it, the first release of the long-awaited implementation of Generics is finally ready for production usage. Generics are a frequently requested feature that has been highly contentious throughout the Go community.


Why we chose NanoIDs for PlanetScale’s API
Learn why PlanetScale used NanoID to generate obscure and URL friendly identifiers.


Revert a migration without losing data
Learn how PlanetScale lets you revert changes to your database after a migration with no downtime and zero data loss.


Behind the scenes: How schema reverts work
Learn how we used VReplication to allow for migration reverts with data retention.



How to prevent SQL injection attacks in Node.js
Don’t let SQL injection attacks hurt your business.


Schema design 101 for relational databases
Whether you’re coming from a NoSQL background or have never used a database, we’ll walk through the basics of relational database schema design.


Introducing Beam
We’re sharing the PlanetScale-powered communication tool we use internally.


Announcing Vitess 13
Learn about the Vitess 13 release.


Misconceptions about databases in the Jamstack
Breaking down the barriers to using relational databases in Jamstack applications.


How we made PlanetScale’s background jobs self-healing
How to build self-healing background jobs into your application with background queueing systems, like Sidekiq.


Build a Laravel application with a MySQL database
Learn how to build a Laravel CRUD application, connect it to a MySQL database, and seed it with data.


How to seed a database with Prisma and Next.js
Use Prisma and Next.js to automatically populate your database with data.


Introduction to Laravel caching
Learn how to speed up your Laravel applications with caching.


Using the PlanetScale CLI with GitHub Actions workflows
Learn how to build automated workflows to develop and operate PlanetScale databases with GitHub Actions.


Create a Harry Potter API with Node.js/Express, MySQL, and PlanetScale
Learn how to build a Harry Potter API using Node.js, Express, and PlanetScale


Using entropy for user-friendly strong passwords
When implementing user authentication with passwords, throw out the password rules you know.


How to set up Next.js with Prisma and PlanetScale
A step-by-step guide for using PlanetScale and Prisma with Next.js.


How our Rails test suite runs in 1 minute on Buildkite
Learn how we use minitest and FactoryBot with parallel tests to get our Rails test suite to run in 1 minute on Buildkite.


Deploy your Dusty Domains for good with Netlify
Deploy your forgotten domains in the month of December for a good cause with Netlify and friends.


Arctype integrates MySQL GUI with PlanetScale
The power of PlanetScale within a beautiful GUI — now you can connect to development branches, switch between them, and even create deploy requests in Arctype.


Scaling databases in a serverless world
In a serverless world, traditional databases scale differently. They need a rock solid foundation that Vitess and PlanetScale can provide.


Introducing Prisma’s Data Platform PlanetScale integration
Create a PlanetScale database on the Prisma Data Platform; immediately store and query data from the browser


Bring your data to PlanetScale
PlanetScale now supports zero downtime data migrations from your existing MySQL Database


PlanetScale is now generally available
The PlanetScale serverless database platform is ready for your production workloads.


Building a Next.js app with Netlify, NextAuth.js, Prisma, and a PlanetScale serverless database
A new dynamic Next.js starter app with authentication and PlanetScale built-in, ready to be deployed to Netlify


PlanetScale launch week
Join our contest and stay tuned for exciting announcements and livestreams all this week


Introducing PlanetScale Managed Cloud
Deploy our database platform in your AWS account


New PlanetScale pricing: Scaler plan upgrades and our new enterprise plan
We’ve updated our database plans to better meet your needs


Using PlanetScale with JetBrains DataGrip
Connect PlanetScale to JetBrains DataGrip to use database branching, deploy requests, and non-blocking schema changes


Comparing AWS’s RDS and PlanetScale
PlanetScale draws customers from RDS due to better scalability and superior developer workflow


Quick deploys using the Web Console
Deploy a TypeScript app using the PlanetScale Vercel integration and Web Console


Optimizing SQL with Query Statistics
Check the performance of your SQL queries in real-time.


NoneSQL, All the DevEx
Databases will win based on superior developer experience, not what is under the hood.


Stay up to date with the PlanetScale Changelog
Stay up-to-date with the latest features and product launches from PlanetScale


Automatically copy migration data in PlanetScale branches
Use PlanetScale branching with the database schema migration tools of your choice


Connect any MySQL client to PlanetScale using Connection Strings
Connect PlanetScale to any MySQL client with Connection Strings for a true serverless database experience.


PlanetScale on Vitess
At PlanetScale, our vision is to build a database developers love that can scale indefinitely. To do this, we knew we needed a database with a history of powering companies that deal with humongous amounts of data and traffic. That’s why we chose Vitess.


Sam Lambert appointed new CEO of PlanetScale
Announcing a new CEO for PlanetScale


The promises and realities of the relational database model
The relational model is one of the oldest surviving models in computer science but it has some drawbacks that need to be addressed.


Integrating PlanetScale with Vercel in a few steps
Together, Vercel and PlanetScale combine a serverless platform with a scalable and easy-to-use database, providing an incredible development experience with limitless scale.


Serverless finally has a database
The dream behind PlanetScale is to serve the modern application developer’s needs as well as something like GitHub does for code.


Non-Blocking Schema Changes
Non-blocking schema changes let you push updates to your database without fear of blocking your databases, locking individual tables, or slowing down production during schema migrations.


Announcing PlanetScale: The database for developers.
PlanetScale is the first database designed for developer workflows, on top of the technology of the hyperscalers.


International Women’s Day 2021
To celebrate International Women’s Day we took some time to ask ourselves, the women of PlanetScale, what questions we’d want to answer and then share regarding our careers in tech.


Announcing Vitess 9.0
On behalf of the Vitess maintainers, I am pleased to announce the general availability of Vitess 9.


Announcing Vitess 8.0
On behalf of the Vitess maintainers team, I am pleased to announce the general availability of Vitess 8 for MySQL.


Horizontal Sharding for MySQL Made Easy
For developers building out a web application, a transactional datastore is the obvious and proven choice, but with success comes scale limitations.


Pitfalls of isolation levels in distributed databases
The more loosely coupled components are in a distributed system, the better it scale


MySQL semi-sync replication: durability, consistency and split brains
We look at some basics and follow up to present scenarios that require higher level intervention to ensure availability and to avoid split brains from taking place.


Consensus algorithms at scale: Part 3 - Use cases
Consensus Use Cases


Orchestrator failure detection and recovery: New Beginnings
how the new integration adds new failure detection and recovery scenarios, making orchestrator’s operation goal-oriented.


Consensus algorithms at scale: Part 2 - Rules of consensus
The Rules of Consensus


On joining PlanetScale and the vision of open source database infrastructure
Why I joined PlanetScale to work on Vitess and PlanetScaleDB, and what I perceive Vitess can become in the MySQL open source ecosystem.


Consensus algorithms at scale: Part 1 - Introduction
This is a multi-part blog series and will be updated with links to the corresponding posts.


Learn Horizontal Scaling on PlanetScaleDB with Vitess — Rate Puppies in a Rust app with Sharded MySQL Database
Rate Puppies in a Rust app with Sharded MySQL Database


Announcing Vitess 7
On behalf of the Vitess maintainers team, I am pleased to announce the general availability of Vitess 7. Major Themes Improved SQL Support We continued to progress towards (almost) full MySQL compatibility.


Debunking 3 myths about Vitess fault tolerance
Here at PlanetScale we hear some concerns about the reliability of Vitess and its capabilities with regards to data loss.


Announcing Vitess 6
I am excited to announce the general availability of Vitess 6, the second release to follow our new accelerated release schedule.


ACID Transactions are not just for banks - the Vitess approach
Build systems that do not lose data. Vitess prevents asynchronous failure in two ways: (1) ensuring that the changes are saved locally on storage, with the redo log and binary logs safely written to disk and (2) making use of semi-synchronous replication.


Videos: Intro to Vitess—its powerful capabilities and how to get started
This video playlist featuring Vitess co-creator, Sugu Sougoumarane, is an excellent resource to learn more about the features and capabilities of open source Vitess.


PlanetScale migrates open source Vitess test suite from Python to Go
It’s easier than ever to contribute to Vitess. The test suite migration from Python to golang makes Vitess more developer friendly.
