MariaDB 中字符的二进制数据类型排序

问题描述 投票:0回答:0

我正在努力深入了解 RDBMS,我正在学习 MariaDB。

努力获取二进制数据类型及其排序规则的工作方式。

我知道 binary(n) 数据类型需要 n 个字节。这意味着可以分配的最小内存是 1 个字节?

这摘自MariaDB文档:

BINARY 类型类似于CHAR 类型,但存储二进制字节串而不是非二进制字符串。 M 表示以字节为单位的列长度。 它不包含字符集,比较和排序是根据字节的数值。

我有以下子问题:

  1. 一个字节的数值到底是什么?它与获取数字的 ASCII 字符相同吗?如果不是,如何确定数值?
  2. 如果我在二进制数据类型中插入一个字符“A”,它是如何编码和存储的?在 Table plus 客户端中,我看不到它是以二进制形式存储的。
  3. 在相同的数据类型中,我可以添加字符和二进制图像,例如,如何确定字节字符串的数值?

我创建了几个表来测试这个,

首先,我创建了一个表来使用 Binary(1) 进行测试,这不允许我添加超过 1 个数字 0-9 或 1 个字符 A-Z 或 a-z

然后我用 Binary(10) 创建了一个表来查看排序顺序是如何工作的

CREATE TABLE BinaryEg1(
    b BINARY(1)
);

-- Adding two binary digits
INSERT INTO BinaryEg1 VALUES (0), (1);


-- Throws error, too long
INSERT INTO BinaryEg1 VALUES (10);


-- Adding basic chars to compare sort
INSERT INTO BinaryEg1 VALUES ('A'), ('a'), ('B'), ('b');

在这里,如果我看到默认排序顺序,它会将数字放在大写字母之前,然后是小写字母:

SELECT * FROM BinaryEg1 ORDER BY b;

-- Creating a table of 10 binary bytes to test how sorting works
CREATE TABLE BinaryEg10(
    b BINARY(10)
);

-- Inserting values into 10 byte binary column
INSERT INTO BinaryEg10 VALUES (HEX('A'));

-- Adding some numbers of varying lengths to test sort order
INSERT INTO BinaryEg10 VALUES
(110),
(44),
(999999),
(1111111111),
(7876);

SELECT * FROM BinaryEg10 ORDER BY b;

现在,我看到了排序顺序:

有人能解释一下排序是如何工作的吗,似乎第一个字节是序列中最重要的,它忽略了其余字节,

我明白,这可能是一个无关紧要且毫无意义的问题,因为通常我认为我不应该使用二进制来存储字符,但我仍然想深入了解这种数据类型的工作原理

sorting binary mariadb collation character-set
© www.soinside.com 2019 - 2024. All rights reserved.