Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли недостатъци при използването на общ varchar(255) за всички текстови полета?

В съхранение, VARCHAR(255) е достатъчно интелигентен, за да съхранява само дължината, от която се нуждаете на даден ред, за разлика от CHAR(255) който винаги ще съхранява 255 знака.

Но тъй като сте маркирали този въпрос с MySQL, ще спомена съвет, специфичен за MySQL:тъй като редовете се копират от слоя на системата за съхранение в слоя SQL, VARCHAR полетата се преобразуват в CHAR за да получите предимството да работите с редове с фиксирана ширина. Така низовете в паметта стават подплатени до максималната дължина от вашия деклариран VARCHAR колона.

Когато вашата заявка имплицитно генерира временна таблица, например по време на сортиране или GROUP BY , това може да използва много памет. Ако използвате много VARCHAR(255) полета за данни, които не трябва да са толкова дълги, това може да направи временната таблица много голяма.

Може също да искате да знаете, че това поведение на „изтриване“ означава, че низ, деклариран с набора от символи utf8, се разширява до три байта на знак дори за низове, които съхранявате с еднобайтово съдържание (например символи ascii или latin1). И по същия начин utf8mb4 наборът от символи кара низа да се разшири до четири байта на знак в паметта.

Така че VARCHAR(255) в utf8 съхраняването на кратък низ като „Няма мнение“ отнема 11 байта на диска (десет знака от по-ниски знаци плюс един байт за дължина), но отнема 765 байта в паметта и по този начин във временни таблици или сортирани резултати.

Помогнах на потребители на MySQL, които несъзнателно създаваха често 1,5GB временни таблици и запълваха дисковото си пространство. Имаха много VARCHAR(255) колони, които на практика съхраняват много къси низове.

Най-добре е да дефинирате колоната въз основа на типа данни, които възнамерявате да съхранявате. Има ползи за налагането на ограничения, свързани с приложението, както споменаха други хора. Но има физическите ползи да избегне загубата на памет, която описах по-горе.

Трудно е да се знае кой е най-дългият пощенски адрес, разбира се, поради което много хора избират дълъг VARCHAR това със сигурност е по-дълго от всеки адрес. И 255 е обичайно, защото е максималната дължина на VARCHAR за които дължината може да бъде кодирана с един байт. Това беше и максималният VARCHAR дължина в MySQL, по-стара от 5.0.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извикване на функция-член execute() на булев вход

  2. ADDTIME() Примери – MySQL

  3. Поправяне на счупено UTF-8 кодиране

  4. Как да извлека две последователни цифри от текстово поле в MySQL?

  5. Как да върнете позицията на елемент от списък в MySQL