sql >> Database >  >> RDS >> Mysql

MySQL:waarom de weergavebreedte specificeren zonder zerofill te gebruiken?

Deze extra "feature" weergavebreedte is nogal verwarrend, omdat in andere kolomtypes zoals CHAR is de lengte specificeert.

Hier is een kort overzicht:

  • Belangrijkste:het is niet met vermelding van de "opslagruimte" of het "aantal cijfers". Het zegt alleen maar hoe de gegevens in deze kolom zijn opgemaakt voordat het wordt geretourneerd. INT(5) kan de dezelfde . opslaan waarden zoals INT(16) of INT(255) - alle drie kunnen alle (en alleen) waarden opslaan die geldig zijn voor INT. INT(255) kan geen nummer met 255 cijfers opslaan. De opslagruimte voor allemaal is de ruimte die een INT inneemt.
  • Als u ZEROFILL gebruikt op een kolom met weergavebreedte en de tekenreeksrepresentatie van het opgeslagen nummer korter is dan de weergavebreedte, wordt links gevuld met nullen. Als het langer duurt, gebeurt er niets. Als u INT(5) kiest en de waarde 13 is, wordt deze geretourneerd als 00013. Als de waarde 123456 is, wordt deze geretourneerd als 123456.
  • Als u ZEROFILL niet gebruikt , er zal helemaal geen opvulling zijn (geen spaties en dergelijke)
  • Als u ZEROFILL gebruikt , moet u zich ervan bewust zijn dat de kolom ook UNSIGNED . zal zijn
  • In elk geval wordt de weergavebreedte geretourneerd wanneer de metagegevens van de tabel worden opgevraagd. Een applicatie zou dus kunnen weten hoe de gegevens moeten worden opgemaakt.

Ik houd niet van de weergavebreedte, omdat de opslaglaag "wetend" is over de visuele presentatie van de opgeslagen gegevens. Daarnaast is er geen nut dat ik ken.




  1. Syntaxis voor SQL-updatequery met inner join

  2. Hoe maak ik een unieke beperking die ook nulls toestaat?

  3. Hoe een afbeelding op te slaan in de kolom SQL Server-databasetabellen

  4. Maanden toevoegen aan een datum in SQLite