目前尚不清楚爲什麼你需要這個。難道你不知道哪張表&列你插入數據?
總之,這裏的查詢,它可以告訴你最長的VARCHAR的長度,所有表在一個給定的數據庫:
SELECT MAX(CHARACTER_MAXIMUM_LENGTH) AS MAX_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar'
AND TABLE_SCHEMA='mydatabase'
如果你需要知道的長度各列:
SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar'
AND TABLE_SCHEMA='mydatabase'
你可能想參考參考文檔在這裏:https://dev.mysql.com/doc/refman/5.7/en/columns-table.html
回覆:您的評論:
當然,這是有道理的。但是對於任何數據庫查詢,包括INFORMATION_SCHEMA都會有一些開銷。如果您不需要運行額外的查詢來獲取此元數據,那就更好了。
許多應用程序框架在某些類型的配置文件中保存有關架構和表的元數據。 XML,YAML,JSON等。它複製存儲在數據庫中的內容,但訪問它通常更快。
幾年前,我是Zend Framework 1.0框架的開發人員之一。 Zend_Db_Table類沒有查詢數據庫以獲取列,數據類型等,但事實證明,經常查詢INFORMATION_SCHEMA導致應用程序太慢。所以我們implemented an optional cache component that you could plug into the Zend_Db_Table object,它將允許表「記住」其元數據從一個PHP請求到下一個。
不,你破解了代碼。 –
我不確定你需要查詢的原因,當你可以在你的標記中硬編碼時獲得最大長度? –
一個模式不應該真正改變你需要製作這種動態響應代碼的地方(每次需要呈現頁面時都會解析模式)。只需在一個通用配置中定義它們,你就會更好,所以它在一個地方可以根據需要進行更改。較少的開銷。 – IncredibleHat