我正在开发一个PHP应用程序,它通过文本区域接受用户输入。它将以加密方式存储在数据库中(使用AES_ENCRYPT)。
我应该使用BLOB或VARBINARY字段吗?是否对这两种类型的领域都有性能影响?
答案 0 :(得分:10)
BLOB和VARBINARY都是“字符串”数据类型,存储二进制字符串(实际上是字节数组),而不是通常的字符串类型,它存储字符字符串,使用charset编码等。
在大多数方面,您可以将BLOB列视为VARBINARY列,可以根据需要大小。
BLOB在以下方面与VARBINARY不同:
使用BLOB ,因为如果您的加密值恰好以空格字节(十六进制20)结尾,那么它将被VARBINARY截断,从而有效地破坏您的值。此外,您不会在加密值上放置索引,因此索引问题无关紧要,也不会有默认值。
答案 1 :(得分:3)
我不认为波西米亚人的答案是准确的。 像BLOB这样的VARBINARY用于存储二进制数据,因此它能够存储任何数据,包括空格。
mysql> create table t1 (id integer auto_increment, data varbinary(100), primary key (id));
Query OK, 0 rows affected (0.09 sec)
// inserting '0', ' ', '0', ' ' - 4 characters including trailing space
mysql> insert into t1 (data) values (unhex('30203020'));
Query OK, 1 row affected (0.02 sec)
+----+------+
| id | data |
+----+------+
| 1 | 0 0 |
+----+------+
1 row in set (0.00 sec)
mysql> select t1.*, length(data) from t1;
+----+------+--------------+
| id | data | length(data) |
+----+------+--------------+
| 1 | 0 0 | 4 |
+----+------+--------------+
1 row in set (0.00 sec)