在MySQL中存储RGB颜色.更好的char或int?

Bag*_*era 4 css php mysql rgb

我正在使用PHP从MySQL数据库中查询CSS设置,然后将其回显到CSS样式表中.示例代码如下:

<?php
    $connect = //connect string
    $query = ($connect, "SELECT bgcolor, font FROM displays WHERE name = 'mySettings'");
    while ($row = mysqli_query($query)){
        $bgcolor = $row[bgcolor];
        $font = $row[font];
    }
    echo '
        body {
            background-color: #'.$bgcolor.';
            font: '.$font.';
        }
    ';
?>
Run Code Online (Sandbox Code Playgroud)

表"displays"对于每个设置的CSS属性都有一列.每行代表用户保存的一组颜色/字体/填充/边距设置.

列"font"是数据类型varchar(50)."bgcolor"应该是什么数据类型?CSS希望看到十六进制值,但MySQL中没有十六进制数据类型.逻辑选择是将值存储为int类型并在SELECT语句中使用HEX()函数.

那么,是否可以更容易和/或使用更少的空间将其存储为char(6)?PHP只是作为字符串处理,而不是实际的数字.十六进制值不会应用任何数学函数; 它只是粘贴到CSS中.

在这种情况下,将值存储为int还是char之间是否有任何偏好?

Cᴏʀ*_*ᴏʀʏ 12

扩展我的评论:

由于这些值仅用于显示目的,因此我将CSS属性值完全存储,无论它是什么,作为数据库中的字符串,例如:

#ab382d
Run Code Online (Sandbox Code Playgroud)

这样就不需要在CSS中放置"#",这样你就可以存储诸如的值

  • transparent
  • blue
  • rgb(100, 100, 100)
  • (或任何其他有效的background-color属性值)

无需知道如何渲染它.

编辑:您可能还想考虑一种缓存机制,以减少数据库中针对样式表信息的命中数,这些信息可能不会经常更改.


Dai*_*Dai 5

24位和32位RGB值可以表示为32位整数,因此您可以使用高效存储int,但在加载和保存时,您始终需要将其解码为人类可读或CSS可读的内容.

伪代码:

 UInt32 rgba  = color.R | ( color.G << 8 ) | ( color.B << 16 ) | ( color.A << 24 );
 Color  color = Color.FromRgba( rgba & 0xFF, ( rgba >> 8 ) & 0xFF, ( rgba >> 16 ) & 0xFF, ( rgba >> 24 ) & 0xFF );
Run Code Online (Sandbox Code Playgroud)