MySQL MySQL指定字符字符串数据类型的CHARACTER SET二进制属性时的反应
在 MySQL 中,数据类型 CHAR 和 VARCHAR 表示了一定长度的字符串。当指定 CHARACTER SET 时,我们可以在其后跟一个二进制属性,某些属性适用于特定字符集,这样可以增加更多的适用性和效率。
二进制属性可以指定为以下之一:
- BINARY
- VARBINARY
- NATIONAL BINARY
- NATIONAL VARBINARY
这些属性会影响字符集以及编码方式。
阅读更多:MySQL 教程
示例
下面是一些展示 MySQL CHARACTER SET 二进制属性行为的示例:
首先,创建一个测试表并添加一些数据:
CREATE TABLE test (
id INT PRIMARY KEY,
name CHAR(6) CHARACTER SET utf8mb4 BINARY
);
INSERT INTO test VALUES (1, 'David');
INSERT INTO test VALUES (2, 'david');
INSERT INTO test VALUES (3, 'DaviD');
然后,运行查询:
SELECT * FROM test WHERE name = 'David';
结果如下:
+----+-------+
| id | name |
+----+-------+
| 1 | David |
+----+-------+
注意我们并没有匹配到其他大小写的 David,这是因为我们指定了 CHARACTER SET 为 BINARY,这会强制MySQL进行区分大小写的二进制比较。
接下来,让我们来看一个 VARBINARY 的更复杂的示例:
CREATE TABLE test2 (
id INT PRIMARY KEY,
name VARBINARY(15) CHARACTER SET utf8mb4
);
INSERT INTO test2 VALUES (1, 'David');
INSERT INTO test2 VALUES (2, 'david');
INSERT INTO test2 VALUES (3, 'DaviD');
运行查询:
SELECT * FROM test2 WHERE name = 'David';
结果如下:
+----+-------+
| id | name |
+----+-------+
| 1 | David |
+----+-------+
由于我们指定了 VARBINARY 属性,MySQL会按顺序比较字节,而不是跟其他字符串比较。
结论
在MySQL中,指定数据类型CHAR和VARCHAR使用二进制属性时,可以通过设置指定的二进制属性,可以更好地控制MySQL进行字符串比较的精度和性能。二进制属性特别有用,因为它们提供了对不同字符集的支持,从而满足了不同场景的需求需求。
极客笔记