MySQL-uzun VarChar uzunligini aniqlang

Ma'lumotlar bazasini optimallashtirishga harakat qilaman. Buni amalga oshirish uchun, bir varchar ustunidan eng uzun ma'lumot kiritish mumkin va keyin ustun ta'rifi, faqat yuqorida kesish kerak.

Masaldagi eng uzun bo'yli kirish uzunligini sqldan foydalanib, qanday qilib topsam bo'ladi?

CREATE TABLE `poller_output` (
  `local_data_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `rrd_name` varchar(19) NOT NULL DEFAULT '',
  `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `output` varchar(200) NOT NULL DEFAULT '',
  PRIMARY KEY (`local_data_id`,`rrd_name`,`time`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8
8

4 javoblar

Masalan, output maydonining maksimal uzunligini bilmoqchi bo'lsangiz, masalan, ushbu so'rovdan foydalanishingiz mumkin:

SELECT Max(CHAR_LENGTH(`output`)) AS Max FROM `poller_output`
19
qo'shib qo'ydi
Zo'r ... men izlayotgan narsam.
qo'shib qo'ydi muallif Jericon, manba
foydali yordam uchun ty; Men hammaning hudonlarning lavozimini ko'rishini tavsiya qilaman
qo'shib qo'ydi muallif user2426679, manba

Buni quyidagi so'zlardan foydalanib qilishingiz mumkin

SELECT column_name FROM database.table PROCEDURE ANALYSE(1,1);

Natijalarning Max_length qiymati bu ustunda sizga eng uzun varcharni beradi.

Shunday qilib, bu holda chiqdi ustunini tekshirmoqchi bo'lganingizda, quyidagi ishni bajarishingiz mumkin

SELECT output FROM poller_output PROCEDURE ANALYSE(1,1);

Buning afzalligi shundan iboratki, u sizni qaytarish qiymatida tegmaslik maydon turini beradi va u chiziqlar bo'ylab bir narsa bo'ladi

VARCHAR(56) NOT NULL
8
qo'shib qo'ydi
+1 - bu sizning ma'lumotlar bazasini optimallashtirishga nisbatan yaxshiroq javob deb o'ylayman. Sizga faqat uzunlikdan ko'proq narsani beradi.
qo'shib qo'ydi muallif Fenton, manba

Aurelioning javobidagi orqadagi shamalar va char_length funktsiyasi xatolarga olib keladi. Ushbu javoblar ishlaydi.

3
qo'shib qo'ydi

Javobni men bergan savolga yozaman:

SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'Database'
    AND TABLE_NAME = 'Table'
    AND COLUMN_NAME = 'Field'
0
qo'shib qo'ydi