DEV Community

Anh Trần Tuấn
Anh Trần Tuấn

Posted on • Originally published at tuanh.net on

Methods for Storing Boolean Values in MySQL

1. Using TINYINT(1)

The most common approach to store Boolean values in MySQL is using the TINYINT(1) data type. Although TINYINT is not explicitly Boolean, it effectively represents Boolean values by using 0 for false and 1 for true.

1.1 Schema Definition

To store Boolean values, you can define a column as TINYINT(1). This notation is often used to indicate that the column will store values of 0 or 1.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    is_active TINYINT(1) NOT NULL
);
Enter fullscreen mode Exit fullscreen mode

1.2 Inserting Data

You can insert Boolean values as follows:

INSERT INTO users (is_active) VALUES (1); -- true
INSERT INTO users (is_active) VALUES (0); -- false
Enter fullscreen mode Exit fullscreen mode

Image

1.3 Querying Data

To query data based on Boolean values:

SELECT * FROM users WHERE is_active = 1; -- Get all active users
SELECT * FROM users WHERE is_active = 0; -- Get all inactive users
Enter fullscreen mode Exit fullscreen mode

1.4 Advantages and Considerations

  • Advantages : Simple and widely used; supported by many MySQL tools.
  • Considerations : Limited to storing values 0 and 1; lacks explicit Boolean type constraints.

2. Using BIT Data Type

Another method is to use the BIT data type. The BIT type can store binary data, making it suitable for Boolean values.

2.1 Schema Definition

Define a column with the BIT type to store Boolean values:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    is_active BIT(1) NOT NULL
);
Enter fullscreen mode Exit fullscreen mode

2.2 Inserting Data

Inserting values into a BIT column:

INSERT INTO users (is_active) VALUES (b'1'); -- true
INSERT INTO users (is_active) VALUES (b'0'); -- false
Enter fullscreen mode Exit fullscreen mode

Image

2.3 Querying Data

Querying the BIT column:

SELECT * FROM users WHERE is_active = b'1'; -- Get all active users
SELECT * FROM users WHERE is_active = b'0'; -- Get all inactive users
Enter fullscreen mode Exit fullscreen mode

2.4 Advantages and Considerations

  • Advantages : More compact storage than TINYINT ; can represent more than one Boolean value in a single column.
  • Considerations : Less intuitive for those unfamiliar with binary types; BIT values require explicit binary notation.

3. Using CHAR(1) or VARCHAR(1)

For more explicit representation, you can use CHAR(1) or VARCHAR(1) columns to store Boolean values as characters such as 'Y'/'N' or 'T'/'F'.

3.1 Schema Definition

Define a column with CHAR(1) or VARCHAR(1):

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    is_active CHAR(1) NOT NULL
);
Enter fullscreen mode Exit fullscreen mode

3.2 Inserting Data

Insert values into the character-based column:

INSERT INTO users (is_active) VALUES ('Y'); -- true
INSERT INTO users (is_active) VALUES ('N'); -- false
Enter fullscreen mode Exit fullscreen mode

Image

3.3 Querying Data

Query based on character values:

SELECT * FROM users WHERE is_active = 'Y'; -- Get all active users
SELECT * FROM users WHERE is_active = 'N'; -- Get all inactive users
Enter fullscreen mode Exit fullscreen mode

3.4 Advantages and Considerations

  • Advantages : Clear representation of Boolean states; allows for more descriptive values if needed.
  • Considerations : Uses more storage space than TINYINT or BIT ; requires validation to ensure only valid characters are used.

4. Using ENUM Data Type

You can use the ENUM data type to store Boolean values with descriptive text. This is particularly useful for clarity in cases where you want to use more meaningful labels.

4.1 Schema Definition

Define an ENUM column with two possible values:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    is_active ENUM('yes', 'no') NOT NULL
);
Enter fullscreen mode Exit fullscreen mode

4.2 Inserting Data

Insert data into the ENUM column:

INSERT INTO users (is_active) VALUES ('yes'); -- true
INSERT INTO users (is_active) VALUES ('no'); -- false
Enter fullscreen mode Exit fullscreen mode

4.3 Querying Data

Query the ENUM column based on the textual representation:

SELECT * FROM users WHERE is_active = 'yes'; -- Get all active users
SELECT * FROM users WHERE is_active = 'no'; -- Get all inactive users
Enter fullscreen mode Exit fullscreen mode

4.4 Advantages and Considerations

  • Advantages : Provides clear, readable values; can be more descriptive.
  • Considerations : Limited to predefined values; may be less efficient for large datasets compared to numeric types.

5. Conclusion

In MySQL, although there is no dedicated Boolean data type, you can effectively use TINYINT(1), BIT , CHAR(1), VARCHAR(1), or ENUM to store Boolean values. Each method has its advantages and is suited to different scenarios based on clarity, storage efficiency, and ease of use.

If you have any questions or need further clarification, feel free to leave a comment below!

Read posts more at : Methods for Storing Boolean Values in MySQL

Top comments (0)