Регулярное выражение для разбора структуры SQL - PullRequest
4 голосов
/ 27 мая 2010

Я пытаюсь проанализировать типы данных MySQL, возвращаемые "DESCRIBE [TABLE]".

Возвращает строки вроде:

int (11)
float
varchar (200)
int (11)
без знака
(6,2)

Я пытался выполнять работу с помощью регулярных выражений, но это не работает.

КОД PHP:

$string = "int(11) numeric";<br/>
$regex = '/(\w+)\s*(\w+)/';<br/>
var_dump( preg_split($regex, $string) );<br/>

Ответы [ 3 ]

4 голосов
/ 27 мая 2010

Запрос информационной схемы для самоанализа таблиц и столбцов и т. Д.

3 голосов
/ 27 мая 2010

Я написал код для этого в Zend_Db_Adapter_Mysqli::describeTable().
Он обрабатывает varchar, char, decimal, float и все целочисленные типы MySQL.

Я не буду размещать код здесь из-за лицензионной политики StackOverflow CC-wiki, но посмотрите его по этой ссылке.

mysql_fetch_field() сообщает только типы данных для наборов результатов запроса, но не постоянных таблиц.

INFORMATION_SCHEMA - еще один вариант, но ранняя реализация MySQL имеет невероятно низкую производительность, что затрудняет его использование в веб-приложении, которое требует быстрого времени отклика. Некоторые изменения в MySQL 5.1.23 пытались улучшить производительность, но некоторые люди по-прежнему сообщают о проблемах.

3 голосов
/ 27 мая 2010

Почему бы просто не извлечь метаданные из полей напрямую ?

...
$meta = mysql_fetch_field($result, $i);
echo $meta->type;
echo $meta->max_length;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...