Apakah mungkin untuk mendapatkan tipe bidang dari permintaan MySQL , dengan cara yang sama Anda bisa mendapatkannya dari tabel dengan SHOW COLUMNS
perintah? Seperti dari tabel turunan,
SELECT x -- presumedMetaFn(x) -- returns "int"
FROM (
SELECT 1 AS x
UNION SELECT 2
) AS t;
Dengan kueri di atas, apakah ada fungsi atau sesuatu yang bisa saya gunakan untuk mendapatkan tipe x? PostgreSQL menyediakan ini dengan Fungsi Informasi Sistempg_typeof
SELECT x, pg_typeof(x)
FROM ( VALUES (1),(2) ) AS t(x);
x | pg_typeof
---+-----------
1 | integer
2 | integer
(2 rows)
Saya tidak mencari metadata di atas meja, tetapi dari hasil kueri. Dengan psql
pada PostgreSQL 11+, ini juga dimungkinkan dengan menjalankan \gdesc
setelah kueri.
Jawaban:
Di dalam MySQL, Anda bisa mendapatkan informasi ini dengan membuat tabel sementara, lalu menggunakan
DESCRIBE
tabel sementara itu:Kita tidak bisa hanya menggunakan
DESCRIBE
tabel asli karena kolom yang ingin kita ketahui jenisnya adalah kolom terhitung, bukan sesuatu yang ditarik langsung dari tabel. Demikian juga, kami tidak dapat menggunakanDESCRIBE
secara langsung pada kueri, karenaDESCRIBE
hanya dapat digunakan pada tabel. Membuat tabel sementara memecahkan kedua masalah tersebut.sumber
Tidak ada cara yang sebanding untuk menyerahkan kueri ke MySQL dan memintanya untuk mengembalikan resultset yang berisi nama dan atribut kolom yang akan dikembalikan oleh kueri Anda ketika dieksekusi.
Namun, pustaka yang Anda gunakan untuk mengakses MySQL mungkin memiliki mekanisme yang bisa digunakan kode Anda ... karena pada saat itu, MySQL mengembalikan informasi ini ke klien dengan setiap kueri yang dieksekusi.
Sebagai contoh, perpustakaan DBD :: mysql di Perl mengembalikan array nama kolom dan tipe data.
Pegangan pernyataan yang dijalankan mengembalikan array nama kolom di @ {$ sth -> {NAME}} dan array tipe data kolom dalam @ {$ sth -> {mysql_type_name}}. Ia mendapatkan ini dari fungsi-fungsi yang disediakan oleh MySQL C API, yang (sejauh yang saya tahu) adalah kode dasar yang sama yang digunakan oleh banyak bahasa berbeda untuk pustaka MySQL mereka ... jadi saya berharap struktur serupa akan diekspos di lain lingkungan.
sumber
Saya percaya data ini tersedia melalui API C dan didokumentasikan dalam Kode Tipe Pernyataan Disiapkan API C tetapi server tidak memiliki kemampuan untuk menyediakannya kepada pengguna akhir,
Untuk tabel jenis SQL, dan nilai yang sesuai
buffer_type
lihat bagan ini.Satu-satunya pekerjaan adalah untuk
CREATE TEMPORARY TABLE AS SELECT (CTAS) ... DESCRIBE
sumber
Pertanyaannya, ketika saya membacanya adalah tentang mendapatkan detail pada kolom di resultset, yang bertentangan dengan kolom tabel database.
Jika Anda menggunakan PHP, ada fungsi bawaan untuk mengakses database dengan MYSQLI dan PDO yang dapat memberi Anda informasi terperinci (tipe data dan sebagainya) tentang kolom dalam hasil kueri (sebagai lawan dari kolom tabel asli) .
Untuk detail tentang metode ini lihat dokumentasi PHP:
sumber