سؤال

أحاول حاليا سرد جميع أعمدة جدول معين وتحديد ما إذا كان كل عمود غير موقع أم لا.

هنا ، مثال على بلدي اختبار لاعبا اساسيا:

CREATE TABLE ttypes
(
    cbiginteger BIGINT UNSIGNED,
    cinteger INT UNSIGNED,
    csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;

من أجل سرد كافة أعمدة جدول معين ، لقد وجدت احتمالين:

SHOW FULL COLUMNS
FROM ttypes;

وفقا ل الوثائق, ، هذا الاستعلام بإرجاع هذه الحقول:الحقل ، النوع ، فارغ ، افتراضي ، إضافي وتعليق.لا يسمح لي أي منهم بتحديد ما إذا كان العمود غير موقع أم لا.

بعد ذلك ، أنظر إلى information_schema.columns وهو الجدول الأساسي المستخدم من قبل SHOW COLUMNS الاستعلام.

SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';

لسوء الحظ ، لا يسمح لي أي من حقول النتائج بتحديد ما إذا كان العمود غير موقع أم لا.

هل كانت مفيدة؟

المحلول

بقدر ما أستطيع أن أقول ، المكان الوحيد الذي يتم تخزين هذه السمات فيه COLUMN_TYPE في INFORMATION_SCHEMA.COLUMNS.

يجب تضمين ذلك في الإخراج من SHOW COLUMNS (ضمن Type):

mysql> show columns from ttypes;
+---------------+----------------------+------+-----+---------+-------+
| Field         | Type                 | Null | Key | Default | Extra |
+---------------+----------------------+------+-----+---------+-------+
| cbiginteger   | bigint(20) unsigned  | YES  |     | NULL    |       |
| cinteger      | int(10) unsigned     | YES  |     | NULL    |       |
| csmallinteger | smallint(5) unsigned | YES  |     | NULL    |       |
+---------------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

لسوء الحظ ، يجب عليك تحليل محتويات Type وتجد unsigned, ، أم لا unsigned هناك - لا يضع أي شيء في الأعمدة الموقعة.

نصائح أخرى

جرب هذا السحر:

select COLUMN_NAME,
       COLUMN_TYPE, 
       IS_NULLABLE, 
       IF(COLUMN_TYPE LIKE '%unsigned', 'YES', 'NO') as IS_UNSIGNED 
       from information_schema.COLUMNS where TABLE_NAME='record1'

الناتج

COLUMN_NAME  COLUMN_TYPE       IS_NULLABLE  IS_UNSIGNED
-----------  ----------------  -----------  -----------
id           int(10) unsigned  NO           YES
recordID     varchar(255)      YES          NO

لتحديد نوع لجميع المتغيرات في جدول يمكنك تشغيل استعلام مثل هذا:

select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' 

بعد ذلك يمكنك بسهولة تحديد نوع لمتغير معين (على سبيل المثال سينترجر) مع استعلام مثل هذا:

select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' and COLUMN_NAME LIKE 'cinteger'

سيعيد الرمز أعلاه اسم المتغير الذي تم البحث عنه فقط إذا كان غير موقع.

في الماضي يمكن الخاص بك باستخدام حلقة الخلية ، الإجراء أو لغة البرمجة المفضلة لديك لاستخدام هذه النتيجة و/أو مواصلة البحث المتغيرات الأخرى.

فقط في حالة شخص يتعثر على هذا للسائق الخلية في صافي ، وذلك باستخدام جيتشيما () مثلي ، وهنا هو كيف تتوفر المعلومات غير الموقعة.

_connection.GetSchema("Columns")

enter image description here

ثم:

enter image description here

نأمل أن يكون هذا ليس تماما من مكان للسؤال ، ويساعد شخص يبحث عن تحديد برمجيا علامة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top