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

Какво е новото за без повече varchar(255)

Какво "правило VARCHAR (255)" имате предвид?

Всеки доставчик на база данни е свободен да внедри VARCHAR както пожелае. Правилата (и насоките) за VARCHAR не е задължително да са еднакви за всяка база данни.

Що се отнася до SQL стандарта, не съм го разглеждал наистина. Може да е доста хлабав, така че всички реализации на VARCHAR са установени, че отговарят на стандарта. Ако SQL стандартът за VARCHAR е наистина строг, тогава доставчиците на СУБД може или да разширят стандарта, или просто да не са съвместими. Не мисля, че действителният стандарт има голямо значение. Това, което има значение, са действителните правила, прилагани от СУБД.

Що се отнася до общата насока, посочете дължина на VARCHAR, достатъчно дълга, за да поддържа системните изисквания. Ако изискването на системата е да позволява не повече от 200 знака, тогава бих посочил дължината като VARCHAR(200) .

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

Ограничението на Oracle за дължина на VARCHAR е 4000 знака. (В предишните версии на Oracle максимумът беше 2000. Ако имате нужда от повече от 4000 знака, можете да използвате CLOB тип данни.

Ограничение на SQL Server до VARCHAR(8000) , освен ако не посочите VARCHAR(MAX) което позволява максимален размер (в байтове) от 2^32-1.

MySQL има ограничение от 65 535 за максимална дължина на реда. Така че това ефективно ограничава размера на VARCHAR до VARCHAR(21844), ако се използва многобайтов набор от символи като utf8. С еднобайтов набор от символи (като latin1), максимумът ще бъде VARCHAR(65532). Ако имате нужда от повече знаци от това или се натъкнете на ограничението за максимална дължина на реда, можете да използвате тип данни TEXT вместо VARCHAR.

Повечето СУБД реализации на VARCHAR съхраняват поле "дължина" за колона VARCHAR, заедно със стойността. дължината се съхранява като цяло число.

В някои СУБД, ако максималната дължина (в байтове) на колона VARCHAR не надвишава 255 байта, полето за дължина може да бъде реализирано като цяло число от един байт. Ако колоната позволява повече от 255 байта, тогава полето за дължина трябва да е по-голямо от един байт.

При динамичните формати на редове, по отношение на съхранението на редове, съхранявайки 10 знака в колона, всъщност няма значение дали колоната е дефинирана като VARCHAR(30) или VARCHAR(1000). При фиксирани формати на редове ще бъде запазено пространството за максималната дължина на колоната. Форматът за хранилища за редове ще зависи от СУБД и в някои случаи (MySQL) от машината за съхранение и посочения формат на ред.

Да, 2016 г. сме. И ние изминахме дълъг път от въвеждането на първата търговска система за релационни бази данни.

Базата данни е само една част от системата. Възможно е да има ограничения в приложението или други софтуерни компоненти. (Ако приложението е написано на C и приложението дефинира структура с масив от байтове за полето, ограничението за размера там ще бъде важно. Увеличаването на размера, разрешен в базата данни, няма автоматично да коригира приложението .

Възможно е също да има ограничения/ограничения на дължината в кода на Javascript или в HTML елементите на уеб страница. Или може да има ограничения на други софтуерни компоненти. Например някои от наистина старите ODBC драйвери на SQL Server имат ограничение от 255 знака (байта?) както за колоните CHAR, така и за VARCHAR.

Така че дължината на VARCHAR в базата данни е само част от историята.

С всичко казано до тук, все още не съм наясно какво имате предвид, когато питате

Можем ли да нарушим правилото VARCHAR(255)?

Чудя се какво "правило" имаш предвид. В повечето бази данни, за които знам, е възможно да се дефинират колони VARCHAR много по-дълги от 255 байта или 255 знака. И това не нарушава нито едно правило.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранени функции в MySQL – имена на таблици и колони на динамични/променливи

  2. Как да намерите средната стойност на разликите на последните N показания на колона PHP MySQL

  3. MySQL получава датата преди n дни като времева марка

  4. Вложените заявки за получаване на брой с две условия

  5. Постоянно влизане PHP и SQL