我使用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.';
}
';
?>
表&#34;显示&#34;每个CSS属性都有一列设置。每行代表用户保存的一组颜色/字体/填充/边距设置。
列&#34;字体&#34;是数据类型varchar(50)。什么数据类型应该&#34; bgcolor&#34;是? CSS希望看到十六进制值,但MySQL中没有十六进制数据类型。逻辑选择是将值存储为int类型,并在SELECT语句中使用HEX()函数。
然后,是否可以更容易和/或使用更少的空间将其存储为char(6)? PHP只是作为字符串处理,而不是实际的数字。十六进制值不会应用任何数学函数;它只是粘贴到CSS中。
在这种情况下,将值存储为int还是char?
之间是否有任何偏好?答案 0 :(得分:12)
扩展我的评论:
由于这些值仅用于显示目的,我将CSS属性值完全存储,无论它是什么,作为数据库中的字符串,例如:
#ab382d
这样就无需使用&#39;#&#39;坐在你的CSS中,这样你就可以存储诸如
之类的值transparent
blue
rgb(100, 100, 100)
background-color
属性值)无需知道如何渲染它。
编辑:您可能还想考虑一种缓存机制,以减少数据库中针对样式表信息的点击次数,这些信息可能不会经常发生变化。
答案 1 :(得分: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 );
答案 2 :(得分:0)
这就是我所做的:
将红色,绿色和蓝色存储在不同的列中。每个都是TINYINT。由于tinyint介于0..255(无符号)之间,因此不会浪费任何一个位,您可以根据需要过滤结果(红色,粉彩,暗色调等)。