我正在使用一個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中,你可以使用INFORMATION_SCHEMA。請參閱https://dev.mysql.com/doc/refman/5.0/en/information-schema.html – user498023
'SHOW COLUMNS FROM table'也可能有幫助。 http://dev.mysql.com/doc/refman/5.7/en/show-columns.html – CollinD