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

时间:2014-06-26 22:51:31

标签: php mysql

注意:我目前正在使用mySQL标准函数,而不是mySQLi或PDO,所以任何解决方案都不会使用mySQLi或PDO。

如果在表上使用utf-8,则PHP函数mysql_field_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版本。

那么有人可以推荐一个防弹功能或查询来获取任何字段长度值来解决上面列出的两个问题吗?

2 个答案:

答案 0 :(得分:1)

我看到另外一个选项:

DESCRIBE your_table_name;

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

DESCRIBEEXPLAIN的同义词,也是SHOW COLUMNS的快捷方式。

如果您只需要一列:

SHOW COLUMNS FROM your_table_name WHERE Field = 'your_column';

更多信息:

EXPLAIN Syntax

SHOW COLUMNS Syntax

答案 1 :(得分:0)

所以我终于解决了这个问题。我使用mysql的SUBSTR函数来检索INFORMATION_SCHEMA中COLUMN_TYPE列的括号之间的值......

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'