これがなぜ必要なのかはっきりしません。どのテーブルにデータを挿入したのかわからないのですか?&とにかく
は、ここにあなたに与えられたデータベース内のすべてのテーブルで最長の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要求からそのメタデータを次のようになります。
いいえ、あなたはコードをクラックしました。 –
マークアップでハードコードできるときに最大の長さを取得するためのクエリが必要な理由がわかりません。 –
スキーマは、このような動的応答コード(ページをレンダリングする必要があるたびにスキーマを解析する)を作成する必要がある場所を頻繁に変更すべきではありません。あなたは共通の設定でそれらを定義する方が良いでしょう。そうすれば、必要ならば変更することができます。より少ないオーバーヘッド。 – IncredibleHat