Получение длины столбца любого заданного поля (все типы полей)

#php #mysql

#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) . Я использую MySQL 5.1.73 на сервере под управлением Windows Server. Я понимаю, что эта проблема не ограничивается только этой конкретной старой сборкой Windows.

Итак, может ли кто-нибудь порекомендовать пуленепробиваемую функцию или запрос для получения любого значения длины полей, позволяющего обойти мои две проблемы, перечисленные выше?

Комментарии:

1. Если вы можете получить длину числового поля и можете определить, является ли тип поля символьным или числовым, используйте IF() in your SELECT , чтобы выбрать, что включить.

2. Но, используя только sql-запросы, у меня нет решения для получения полей числового типа, для которых, я полагаю, mysql, похоже, надежно возвращает значение NULL.

3. Похоже, вы могли бы получить COLUMN_TYPE поле и (в PHP) вывести число между круглыми скобками.

4. Вот несколько абсурдный запрос (обратите внимание, неполный): sqlfiddle.com /#!2/a2581/26901

Ответ №1:

Я вижу 1 другой вариант:

 DESCRIBE your_table_name;
  

Тогда вам нужно только получить числовое значение из Type столбца с регулярным выражением.

DESCRIBE является синонимом EXPLAIN и сокращением для SHOW COLUMNS .

Если вам нужен только один столбец:

 SHOW COLUMNS FROM your_table_name WHERE Field = 'your_column';
  

Подробная информация:

ОБЪЯСНИТЕ синтаксис

ПОКАЗАТЬ синтаксис СТОЛБЦОВ

Комментарии:

1. Спасибо @bitWorking, идея регулярных выражений дала мне несколько новых идей. В конце я использовал SUBSTR, который также работал. Код показан ниже..

Ответ №2:

Итак, я наконец-то разобрался с этим. Я использовал функцию SUBSTR mysql для извлечения значений между скобками столбца COLUMN_TYPE в INFORMATION_SCHEMA…

 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'