我有一个HTML表单,我需要获取相应MySQL数据库中每个字段的最大设置长度,以便为我的文本字段的maxlength属性设置正确的值。是否有MySQL查询可以为我设置最大字段长度?
我的最佳解决方案是查询SHOW COLUMNS FROM {database name}
,但这将返回括号中具有最大字段长度的字段类型(例如int(6),varchar(20),decimal(5,1),等等,那么我会使用PHP或其他东西来过滤掉最大长度,似乎必须有更好的方法。
答案 0 :(得分:3)
目前尚不清楚为什么需要这个。你不知道哪张桌子和桌子。您是否已将数据插入?
无论如何,这是一个可以告诉你给定数据库中所有表中最长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请求到下一个。