gpt4 book ai didi

mysql - 将颜色存储在数据库中

转载 作者:行者123 更新时间:2023-11-30 22:43:15 25 4
gpt4 key购买 nike

我读过 this question接受的答案建议将颜色值存储为数据库中的字符串。但是,为该问题存储这些值的目的是为了显示目的。

我会想象使用 SUBSTRING()CONV() 获取值并将它们转换为整数比按位运算慢(或者我可以转换为整数在应用程序端,无论是 PHP 还是 Node,但这仍然需要时间):

SELECT CONV(SUBSTRING(colour, 1, 2), 16, 10) AS red,
CONV(SUBSTRING(colour, 3, 2), 16, 10) AS green,
CONV(SUBSTRING(colour, 5, 2), 16, 10) AS blue
FROM table
WHERE conditions;

相比于:

SELECT (colour >> 16) & 0xFF AS red,
(colour >> 8) & 0xFF AS green,
colour & 0xFF AS blue
FROM table
WHERE conditions;

(那些是伪代码,但你明白了。)

将它们存储为整数(即​​ 24 位 RGB 为 UNSIGNED MEDIUMINT 和 32 位 RGBA 为 UNSIGNED INT)是否合适?

最佳答案

性能差异会很小。一般来说,运算符(>>、& 等)和函数调用(CONV 等)不如获取记录重要。

为此,如果您有一个大表(千兆字节),缩小数据类型是最重要的事情。这将缩小数据,从而减少 I/O。

MEDIUMINT UNSIGNED 是 RGB 最严格的可能 -- 3 个字节。 (BINARY(3) 也是 3 个字节;代码可能是其他内容。)

您的第一个示例似乎将十六进制存储在 CHAR(6) 中。这将占用 6 个字节,如果您有 CHAR(6) CHARACTER SET utf8,则占用 18 个字节。 VARCHAR(6) 大约是 8 个字节。因此,我不喜欢第一个提供的选项。

您还可以考虑使用 MySQL 的设计用途——只是一个数据存储库。然后将解析/解释等留给应用程序。也就是说,编写 SQL 来存储和检索“颜色”,而不知道或不关心哪些位/字节指的是红色等。

关于mysql - 将颜色存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com