Antworten:
Diese Datentypen sind Synonyme.
Ich werde hier einen anderen Ansatz verfolgen und vorschlagen, dass es für Ihre Mitentwickler genauso wichtig ist, Ihren Code zu verstehen wie für den Compiler / die Datenbank. Die Verwendung von Boolean kann das Gleiche tun wie die Verwendung von tinyint, hat jedoch den Vorteil, dass Sie semantisch vermitteln, was Ihre Absicht ist, und das ist etwas wert.
Wenn Sie einen tinyint verwenden, ist es nicht offensichtlich, dass die einzigen Werte, die Sie sehen sollten, 0 und 1 sind. Ein Boolescher Wert ist IMMER wahr oder falsch.
boolean
ist kein eindeutiger Datentyp in MySQL; Es ist nur ein Synonym für tinyint
. Siehe diese Seite im MySQL-Handbuch .
Persönlich würde ich vorschlagen, tinyint als Präferenz zu verwenden, da Boolean nicht das tut, was Sie denken, dass es aus dem Namen hervorgeht, was zu möglicherweise irreführendem Code führt. Aber auf praktischer Ebene spielt es wirklich keine Rolle - beide tun dasselbe, sodass Sie durch die Verwendung von beiden nichts gewinnen oder verlieren.
Verwenden Sie enum, es ist das einfachste und schnellste
Ich werde enum oder tinyint (1) nicht empfehlen, da Bit (1) nur 1 Bit zum Speichern des Booleschen Werts benötigt, während tinyint (1) 8 Bit benötigt.
ref
BIT(M) - approximately (M+7)/8 bytes
siehe: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Es stimmt zwar, dass bool
und tinyint(1)
sind funktional identisch sind , bool
sollte die bevorzugte Option sein , da sie die semantische Bedeutung trägt , was Sie zu tun versuchen. Außerdem werden viele ORMs bool
in den nativen booleschen Typ Ihrer Programmiersprache konvertiert .
Meine Erfahrung bei der Verwendung von Dapper zur Verbindung mit MySQL ist, dass es wichtig ist . Ich habe ein nicht nullbares Bit (1) mit dem folgenden Skript in ein nullbares tinyint (1) geändert:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Dann fing Dapper an, Ausnahmen zu werfen. Ich habe versucht, den Unterschied vor und nach dem Skript zu untersuchen. Und bemerkte, dass sich das Bit (1) in tinyint (1) geändert hatte.
Ich rannte dann:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Welches löste das Problem.
boolean
alstinyint(1)
. Sie können also verwendenboolean
,true
undfalse
MySQL behandelt sie alstinyint(1)
,1
und0
.