2017-10-13 8 views
0

私は、対応するMySQLデータベースの各フィールドの最大設定長を取得して、テキストフィールドのmaxlength属性に適切な値を設定する必要があるHTML形式を持っています。それらのフィールドの長さを最大に設定するMySQLクエリがありますか?mysql各列の最大設定長を取得する方法

SHOW COLUMNS FROM {database name}を照会するのが最善の解決策ですが、フィールドの型が括弧で囲まれたフィールドタイプ(int(6)、varchar(20)、decimal(5,1)など)を返します。だから、私はPHPや何かを使って最大の長さだけをフィルタリングし、より良い方法があるように思えます。

+1

いいえ、あなたはコードをクラックしました。 –

+0

マークアップでハードコードできるときに最大の長さを取得するためのクエリが必要な理由がわかりません。 –

+1

スキーマは、このような動的応答コード(ページをレンダリングする必要があるたびにスキーマを解析する)を作成する必要がある場所を頻繁に変更すべきではありません。あなたは共通の設定でそれらを定義する方が良いでしょう。そうすれば、必要ならば変更することができます。より少ないオーバーヘッド。 – IncredibleHat

答えて

2

これがなぜ必要なのかはっきりしません。どのテーブルにデータを挿入したのかわからないのですか?&とにかく

は、ここにあなたに与えられたデータベース内のすべてのテーブルで最長のVARCHARの長さを伝えることができ、クエリです:

SELECT MAX(CHARACTER_MAXIMUM_LENGTH) AS MAX_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'varchar' 
AND TABLE_SCHEMA='mydatabase' 

あなたがの長さにそれぞれ列を知る必要がある場合:

SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'varchar' 
AND TABLE_SCHEMA='mydatabase' 

あなたがここにリファレンスドキュメントを参照したい場合がありますhttps://dev.mysql.com/doc/refman/5.7/en/columns-table.html


Re:ご意見:

確かに意味があります。しかし、INFORMATION_SCHEMAを含めて、データベースクエリには少しオーバーヘッドがあります。このメタデータを取得するために追加のクエリを実行する必要がない場合は、それが良いでしょう。

多くのアプリのフレームワークは、ある種の設定ファイルのスキーマやテーブルに関するメタデータを保持しています。 XML、YAML、JSONなどがあります。これはデータベースに格納されているものを複製しますが、一般にアクセスする方が早いです。

私は、数年前、Zend Framework 1.0フレームワークの開発者の一人でした。 Zend_Db_Tableクラスはデータベースに列やデータ型などを取得するためにクエリを実行しましたが、INFORMATION_SCHEMAを頻繁に検索する方法が遅すぎることが判明しました。だから私たちはimplemented an optional cache component that you could plug into the Zend_Db_Table objectと、それはテーブルを "覚えて" 1つのPHP要求からそのメタデータを次のようになります。

+0

あなたが「なぜこれが必要なのか」という質問に答えるために、テキストフィールドにテキストフィールドのmaxlength属性を埋め込むことができるように、テキストフィールドにデータベースの行の現在の値を動的に埋め込むことを望んでいました。 –

+0

返信ありがとう、@Bill Karwin。素晴らしい情報。 CHARACTER_MAXIMUM_LENGTHが "int"や "decimal"のようなデータ型に対してnullを返す理由はありますか? –

+1

INTとDECIMALは文字列型ではありません。 –

関連する問題