#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 yourSELECT
, чтобы выбрать, что включить.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'