> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shipthing.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 切换到 PlanetScale

> 如何将数据库提供商更改为 PlanetScale。

以下是如何从 Neon 切换到 [PlanetScale](https://planetscale.com)。

## 1. 在 PlanetScale 上创建新数据库

在 PlanetScale 上创建数据库后，您将获得一个连接字符串。它看起来像这样：

```
mysql://<username>:<password>@<region>.aws.connect.psdb.cloud/<database>
```

请妥善保存此连接字符串，下一步将会用到它。

## 2. 更新环境变量

更新环境变量以使用新的 PlanetScale 连接字符串：

```js apps/database/.env theme={"system"}
DATABASE_URL="mysql://<username>:<password>@<region>.aws.connect.psdb.cloud/<database>"
```

```js apps/app/.env.local theme={"system"}
DATABASE_URL="mysql://<username>:<password>@<region>.aws.connect.psdb.cloud/<database>"
```

等等。

## 3. 更换 `@repo/database` 中的依赖项

卸载现有依赖项...

```sh Terminal theme={"system"}
pnpm remove @neondatabase/serverless @prisma/adapter-neon ws @types/ws --filter @repo/database
```

...并安装新的依赖项：

```sh Terminal theme={"system"}
pnpm add @planetscale/database @prisma/adapter-planetscale --filter @repo/database
```

## 4. 更新数据库连接代码

更新数据库连接代码以使用新的 PlanetScale 适配器：

```ts packages/database/index.ts {3-4, 17-18} theme={"system"}
import 'server-only';

import { Client, connect } from '@planetscale/database';
import { PrismaPlanetScale } from '@prisma/adapter-planetscale';
import { PrismaClient } from '@prisma/client';
import { env } from '@repo/env';

declare global {
  var cachedPrisma: PrismaClient | undefined;
}

const client = connect({ url: env.DATABASE_URL });
const adapter = new PrismaPlanetScale(client);

export const database = new PrismaClient({ adapter });
```

## 5. 更新 Prisma 模式

更新 Prisma 模式以使用新的数据库提供商：

```prisma packages/database/prisma/schema.prisma {10} theme={"system"}
// 这是您的 Prisma 模式文件，
// 了解更多信息，请参阅文档：https://pris.ly/d/prisma-schema

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["driverAdapters"]
}

datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma"
}

// 这是一个存根模型。
// 删除它并添加您自己的 Prisma 模型。
model Page {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}
```

## 6. 添加 `dev` 脚本

在 `package.json` 中添加 `dev` 脚本：

```json packages/database/package.json {3} theme={"system"}
{
  "scripts": {
    "dev": "pscale connect [database_name] [branch_name] --port 3309"
  }
}
```
