CREATE TABLE char_example (
id INT AUTO_INCREMENT PRIMARY KEY,
name CHAR(10)
);以上SQL代码创建了一个名为 char_example 的表,其中包含两列:id 和 name。name 列使用了 CHAR(10) 数据类型,表示它将存储最多10个字符的固定长度字符串。
当向该表插入数据时,并且为 name 列赋值时,该值将以固定长度的10个字符存储。如果赋值的字符串长度小于10个字符,MySQL会使用空格填充以达到指定的长度。
例如,如果将字符串 ‘John’ 插入到 name 列中,它将以 'John ’ 的形式存储,其中空格填充以达到10个字符的长度。
这种存储机制确保了存储在 CHAR 列中的每个值占用相同的空间,这在某些情况下可以提高性能。但是,在使用 CHAR 列存储可变长度数据时,需要考虑存储空间的潜在浪费问题。
CREATE TABLE varchar_example (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(255)
);以上SQL代码创建了一个名为 varchar_example 的表,其中包含两列:id 和 description。description 列使用了 VARCHAR(255) 数据类型,表示它将存储最多255个字符的可变长度字符串。
与 CHAR 类型不同,VARCHAR 类型在存储时只会占用实际数据所需的存储空间,而不会额外使用空间进行填充。这意味着,如果我们将较短的字符串存储在 VARCHAR 列中,它将只占用实际字符串长度所需的空间,而不会在后面填充空格。
例如,如果将字符串 ‘John’ 插入到 description 列中,它将只以 ‘John’ 的形式存储,不会额外填充空格。这样的存储机制可以减少存储空间的浪费,特别是在存储大量可变长度数据时,可以节省大量的存储空间。
-- 创建一个表用于演示 char 和 varchar 类型的使用
CREATE TABLE char_vs_varchar_selection (
id INT AUTO_INCREMENT PRIMARY KEY,
country_code CHAR(3),
postal_code CHAR(6),
username VARCHAR(20),
address VARCHAR(255)
);
-- 插入一些数据用于演示
INSERT INTO char_vs_varchar_selection (country_code, postal_code, username, address)
VALUES ('USA', '123456', 'john_doe', '123 Main Street, City, State, Zip');
INSERT INTO char_vs_varchar_selection (country_code, postal_code, username, address)
VALUES ('UK', 'AB12CD', 'alice_smith', '456 High Street, Town, County, Postal');
INSERT INTO char_vs_varchar_selection (country_code, postal_code, username, address)
VALUES ('CAN', 'A1B2C3', 'mary_jane', '789 Maple Avenue, Village, Province, Postal');
INSERT INTO char_vs_varchar_selection (country_code, postal_code, username, address)
VALUES ('FRA', '75001', 'pierre_dubois', '10 Rue de la Paix, Paris');
-- 查看表的数据
SELECT * FROM char_vs_varchar_selection;