php - 序列化(数据)的哪个mysql列类型?

标签 php mysql

我在 php 中序列化了很多要使用 mysql 存储在数据库中的数组。

最终字符串的长度可以在 2000 到 100,000+ 之间变化很大,我想知道最好的列类型是什么?

我目前将它设置为 LONGTEXT 但我觉得这有点过头了!数据库已经处于事件状态,大约有 300 万行,这是一个即将添加的新列。

谢谢

最佳答案

始终使用任何 BLOB data-type用于序列化数据,以便它不会被切断并以二进制安全的方式破坏序列化。如果最终字符串的长度没有最大值,那么您将需要 LONGBLOB。如果您知道数据不会填满 2^24 个字符,您可以使用 MEDIUMBLOBMEDIUMBLOB 大约为 16MB,而 LONGBLOB 大约为 4GB,所以我会说您使用 MEDIUMBLOB 非常安全。

为什么是二进制数据类型? MySQL 中的文本数据类型具有编码。字符编码将影响序列化数据在不同编码之间的转换方式。例如。当存储为 Latin-1 但随后读出为 UTF-8 时(例如,由于数据库驱动程序连接编码设置),序列化数据可能会被破坏,因为二进制偏移确实发生了变化,但序列化数据并未针对此类变化进行编码。 PHP 的序列化字符串是二进制数据,没有任何特定的编码。

关于php - 序列化(数据)的哪个mysql列类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10770974/

相关文章:

使用数组的 php preg_replace - 具有重音字符的第一个或最后一个字母不起作用

php - 是否可以将 gettext 与来自 mysqli_query 的数据一起使用?

php - Symfony 2 中默认独白的自定义独白处理程序

mysql - 在 Ubuntu 14.04 中安装 MySQL 5.6 会触发删除所需的包

php - 搜索查询,例如 Twitter 热门话题

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

javascript - 更改同一系列数据中数据的条形颜色

PHP 从 rand() 函数中排除数字

mysql - Bookshelf.js 获取数据透视表属性

mysql - Oracle XE 或 MySQL,我应该选择哪一个?