我可以获取数据库列';s规范


Can I fetch a database column's spec in PHP?

我正在使用一个PHP框架,该框架的数据库模型类足够智能,可以在模式更改时自行升级。在某种程度上,他们通过类似于以下伪代码的检查列表来做到这一点:

I am version 4.
function UpgradeVersion()
{
    If the DB doesn't yet have a column "foo" in this table,
        I'm version 1. Add the "foo" column.
    If the DB doesn't yet have a column "bar" in this table,
        I'm version 2. Add the "bar" column.
    If the DB still has a deprecated "fargle" in this table,
        I'm version 3. Rename "fargle" to "gargle".
    I'm now up to version 4.
}

我在最新的周期中遇到了一个障碍,因为我们必须做的一件事是扩展在上一版本中错误创建的列的大小。因此,为了让模型正确地升级自己,它不能仅仅根据列的存在性检查来决定升级;它必须知道列的当前格式,并弄清楚它是否仍然太短。

我浏览了PHP和PDO文档,但没有找到一种非实验性的、不推荐使用的方法来可靠地获取这些信息。我能立即想到的唯一方法是尝试一个比原始长度长但比新长度短的插入,然后选择结果;如果它被截断,那么该列太短,需要升级。不过,这似乎并不理想,所以我在这里寻找更好的选择。

您可以使用MySQL语句DESCRIBE myTable;,它将为您提供有关每列的信息