Php 获取任何给定字段(所有类型的字段)的列长度

Php 获取任何给定字段(所有类型的字段)的列长度,php,mysql,Php,Mysql,注意:我目前使用的是mySQL标准函数,而不是mySQLi或PDO,因此任何解决方案在理想情况下都不会使用mySQLi或PDO 如果在表中使用utf-8,PHP函数mysql\u field\u len不起作用,因为它返回的值要高得多(实际长度的两倍或三倍)。一个已知的问题 如果您想尝试直接使用SQL查询执行此操作,例如 SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE tab

注意:我目前使用的是mySQL标准函数,而不是mySQLi或PDO,因此任何解决方案在理想情况下都不会使用mySQLi或PDO

如果在表中使用utf-8,PHP函数
mysql\u field\u len
不起作用,因为它返回的值要高得多(实际长度的两倍或三倍)。一个已知的问题

如果您想尝试直接使用SQL查询执行此操作,例如

SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'xxxx' 
AND COLUMN_NAME = 'yyy'
对于数值字段,该操作也失败,而是返回(NULL)。我正在运行Windows server的服务器上使用mySQL 5.1.73。我的理解是,这个问题不仅仅局限于这个特定的旧Windows版本

因此,有谁能推荐一个防弹函数或查询来获取任何字段长度值,从而解决我上面列出的两个问题吗?

我看到了1个其他选项:

DESCRIBE your_table_name;
然后,您只需使用正则表达式从
Type
列中获取数值

descripe
EXPLAIN
的同义词,是
显示列的快捷方式

如果只需要一列:

SHOW COLUMNS FROM your_table_name WHERE Field = 'your_column';
更多信息:


所以我终于解决了这个问题。我使用mysql的SUBSTR函数来检索信息模式中列类型列的括号之间的值

SELECT SUBSTR(COLUMN_TYPE,INSTR(COLUMN_TYPE,"(") + 1, INSTR(COLUMN_TYPE,")") - INSTR(COLUMN_TYPE,"(") - 1) AS temp FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'xxx' AND COLUMN_NAME = 'yyy'

如果您可以获取数字字段的长度,并且可以判断字段类型是字符型还是数字型,请在
选择
中使用
If()
来选择要包含的字段。但是,仅使用sql查询,我没有一个解决方案来获取数字类型的字段,我相信mysql似乎可以可靠地为其返回空值。看起来像和(在PHP中)拉出括号之间的数字。这里有一个有点荒谬的查询(注意,不完整):谢谢@bitWorking,正则表达式的想法给了我一些新的想法。最后我使用了SUBSTR,它也起了作用。代码如下所示。。