【问题标题】:Store color information in MySQL and parse Red, Green and Blue values in SELECT query在 MySQL 中存储颜色信息并在 SELECT 查询中解析 Red、Green 和 Blue 值
【发布时间】:2015-02-23 03:53:23
【问题描述】:

我正在开发一个在 MySQL 中使用大量颜色数据的 Web 应用程序。我使用的常用过程包括基于一些视觉数据的平均颜色计算,然后对这些颜色执行搜索查询。

到目前为止,我所做的是将平均计算颜色存储到 Hex(简单 varchar (6))列中,并将 R G B 值存储到 INT 列中。后来我能够执行这类查询来搜索颜色。

$sql = "SELECT * FROM datatable WHERE ( ABS(color1_red - $red) + ABS(color1_blue-$blue) + ABS(color1_green - $green) < $color_threshold) order by id desc";

它的数据库结构如下所示。

但是当我执行数据库更新时,我注意到我的数据有很多重复,所以我想知道是否有更好的方法在 MySQL 中存储颜色。

我正在考虑尝试做这样的事情:

使用表格颜色

制作表格颜色产生的问题是,这里有固定数量的十六进制格式的颜色,所以一旦您可以从 PHP 访问颜色信息,表格真的有理由吗? 但是旧结构带来的问题是,有一点重复,表格看起来很笨拙。

有没有在 MySQL 中存储颜色信息的好方法和/或有没有办法编写这个函数

$sql = "SELECT * FROM datatable WHERE (ABS (color1_red - $red) + ABS (color1_blue-$blue) + ABS (color1_green - $green) < $color_threshold) order by id desc";

仅使用 HEX 列并避免使用红、绿、蓝 (int()) 列?

谢谢。

【问题讨论】:

    标签: mysql sql colors hex


    【解决方案1】:

    您可以为此使用 BIGINT 类型。并且字段将从 0 (#000000) 到 16777215 (#FFFFFF)。 在 MySQL 中使用 HEX() 函数很容易获得 HEX 值,也很容易计算红绿蓝的 int 值。例如,如果我们以这种方式存储颜色,它是 16000003,那么:

    对于红色: 选择 ( ( 16000003 ) DIV ( 256 *256 ) )

    对于绿色: 选择 ( ( 16000003 % ( 256 *256 ) ) 第 256 节 )

    对于蓝色: 选择 ( ( 16000003 % ( 256 *256 ) ) %256 )

    【讨论】:

    • 看起来不错,但 BIGINT 数据类型不是占用大量存储空间吗?这种现场计算是否足够有效,还是首先将 RGB 值存储在数据库中更好?
    • BIGINT 仅消耗 8 个字节。总共少于 VARCHAR(6) 或三个 int 字段。而且这种计算速度非常快,您不必担心这一点。还可以将RGB的所有九位数字存储在一个字段中(从0到255255255),并且可以轻松提取红绿蓝,并且在可视化方面更好。
    • 谢谢,我将尝试两种解决方案,看看哪种最适合
    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多