2017-10-13 52 views
0

我有一個HTML表單,我需要在相應的MySQL數據庫中獲取每個字段的最大設置長度,以便爲我的文本字段的maxlength屬性設置適當的值。是否有MySQL的查詢,會給我那些設置最大字段長度?mysql如何獲得每列的最大設置長度

我最好的解決方案是查詢SHOW COLUMNS FROM {database name},但是它會返回字段類型的最大字段長度(如int(6),varchar(20),decimal(5,1)等) ,所以我會用PHP或者其他東西來篩選出最大的長度,並且看起來好像有一個更好的方法。

+1

不,你破解了代碼。 –

+0

我不確定你需要查詢的原因,當你可以在你的標記中硬編碼時獲得最大長度? –

+1

一個模式不應該真正改變你需要製作這種動態響應代碼的地方(每次需要呈現頁面時都會解析模式)。只需在一個通用配置中定義它們,你就會更好,所以它在一個地方可以根據需要進行更改。較少的開銷。 – IncredibleHat

回答

2

目前尚不清楚爲什麼你需要這個。難道你不知道哪張表&列你插入數據?

總之,這裏的查詢,它可以告訴你最長的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請求到下一個。

+0

要回答你的問題「爲什麼我需要這個:」我希望只要我在數據庫行中動態填充文本字段中的當前值,我也可以在文本字段中填寫maxlength屬性。 –

+0

感謝您的回覆,@Bill Karwin。偉大的信息。對於像「int」和「decimal」這樣的數據類型,CHARACTER_MAXIMUM_LENGTH是否有原因返回? –

+1

INT和DECIMAL不是字符串類型。 –