php - MySQL 到 SQLite 的迁移。我需要更新数据类型吗?

标签 php mysql sqlite

我使用 mysql2sqlite.sh 将我们的应用程序从 MySQL 迁移到 SQLite .

我更新了 PDO 连接字符串,它可以继续正常工作几周,但在使用 DB Browser for SQLite 浏览数据库时,我遇到了一些奇怪的事情;看来该脚本没有将数据类型更新为与 SQLite 兼容,但它仍然可以工作。这是怎么样?

表格

CREATE TABLE `events` (
    `id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    `Forename`  varchar(255) NOT NULL,
    `Surname`   varchar(255) NOT NULL,
    `Site`  TEXT,
    `Badge` varchar(255) NOT NULL,
    `Start` datetime NOT NULL,
    `End`   datetime NOT NULL,
    `Created`   timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);

在使用 MySQL 数据类型时如何继续正常工作而不出现问题?

根据 SQLite 文档,大多数这些数据类型在 SQLite 中不存在,但它仍然有效。

我应该将数据类型更改为 TEXT 或 SQLite 支持的其他类型吗?

更新

根据 SQLite 文档,这些是数据类型:

INTEGER
TEXT
BLOB
REAL
NUMERIC

但它可以继续工作,没有问题,使用:

varchar(255)
datetime
timestamp

这怎么样?

最佳答案

来自docs -

SQLite 本质上支持所谓的“类型关联”。 SQLite 将 varchar 等内容转换为 text 以用于存储目的。

A column with TEXT affinity stores all data using storage classes NULL, TEXT or BLOB. If numerical data is inserted into a column with TEXT affinity it is converted into text form before being stored.

SQLite 将关联性分为几组(TEXT、NUMERIC、INTEGER、REAL、NONE) 每个组都遵循标准 SQL 数据类型以在这些列中进行转换。

您不必在转换过程中更改数据类型,因为 SQLite 将识别并根据其关联类型进行适当的转换。

关于php - MySQL 到 SQLite 的迁移。我需要更新数据类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548923/

相关文章:

sqlite - Sqlite3 中时间戳之间的秒数差异

php - 重定向到给定的 Laravel URL

mysql - 使用 "ORDER BY CASE"不使用主索引对结果进行排序

sqlite - 在 sqlite3 中打开数据库并查看表?

Android - AsyncTask、SQLite 和上下文

mysql - 使用单个 Group By 查询进行多项选择

php - 数据库管理 php mysql

java - Eclipse PDT 插件给我带来了麻烦

php - 将PHP数组格式转换为js数组格式,仅使用js

PHP 连接 MySQL 错误