Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Warum die Anzeigebreite angeben, ohne Zerofill zu verwenden

Diese zusätzliche "Feature"-Anzeigebreite ist ziemlich verwirrend, da in anderen Spaltentypen wie CHAR gibt die Länge an.

Hier ist eine kurze Aufschlüsselung:

  • Am wichtigsten:Es ist nicht Angabe des „Speicherplatzes“ oder der „Stellenzahl“. Es sagt nur, wie die Daten in dieser Spalte formatiert sind bevor es zurückgegeben wird. INT(5) kann dasselbe speichern Werte wie INT(16) oder INT(255) - alle drei können alle (und nur) Werte speichern, die für INT gültig sind. INT(255) kann keine Zahl mit 255 Ziffern speichern. Der Speicherplatz für alle ist der Platz, den ein INT einnimmt.
  • Wenn Sie ZEROFILL verwenden in einer Spalte mit Anzeigebreite, und die Zeichenfolgendarstellung der gespeicherten Zahl ist kürzer als die Anzeigebreite, wird links mit Nullen aufgefüllt. Wenn es länger dauert, passiert nichts. Wenn Sie INT(5) wählen und der Wert 13 ist, wird er als 00013 zurückgegeben. Wenn der Wert 123456 ist, wird er als 123456 zurückgegeben.
  • Wenn Sie ZEROFILL nicht verwenden , gibt es überhaupt keine Auffüllung (keine Leerzeichen und dergleichen)
  • Wenn Sie ZEROFILL verwenden , müssen Sie sich darüber im Klaren sein, dass die Spalte auch UNSIGNED sein wird
  • In jedem Fall wird die Anzeigebreite zurückgegeben, wenn die Metadaten der Tabelle abgefragt werden. So könnte eine Anwendung wissen, wie die Daten formatiert werden sollen.

Ich mag die Anzeigebreite nicht, weil die Speicherschicht die visuelle Darstellung der gespeicherten Daten "kennt". Abgesehen davon ist mir keine Verwendung bekannt.