Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 针对VarChar长度在20到4000个字符之间的变化优化MySQL表_Php_Mysql_Sql - Fatal编程技术网

Php 针对VarChar长度在20到4000个字符之间的变化优化MySQL表

Php 针对VarChar长度在20到4000个字符之间的变化优化MySQL表,php,mysql,sql,Php,Mysql,Sql,我计划存储最大大小为4500个VarChar的字符串,但大多数条目将少于200个字符。MySql足够聪明,可以进行优化吗 我目前的解决方案是使用5个表,data\u small、data\u medium、data\u large等,并根据字符串的长度进行插入。另一种解决方案是将文件保存到磁盘上,这意味着对数据库进行第二次访问,但会产生较小的回报。MySQL会做得很好,因为在这方面,大多数RDBMS都会做得很好。将字段指定为type CHAR()时,无论字符串中有多少个字符,都将始终使用字符数。

我计划存储最大大小为4500个VarChar的字符串,但大多数条目将少于200个字符。MySql足够聪明,可以进行优化吗


我目前的解决方案是使用5个表,data\u small、data\u medium、data\u large等,并根据字符串的长度进行插入。另一种解决方案是将文件保存到磁盘上,这意味着对数据库进行第二次访问,但会产生较小的回报。

MySQL会做得很好,因为在这方面,大多数RDBMS都会做得很好。将字段指定为type CHAR()时,无论字符串中有多少个字符,都将始终使用字符数。例如:如果您有Char(64)字段,并且插入了'ABCD',那么该字段仍然是64字节(假定为非unicode)

但是,当使用VARCHAR()时,单元格只使用字符串中的字节数,加上存储字符串大小所需的字节数。因此:如果您有VARCHAR(64)并插入'ABCD',则只会使用5个字节。字符“ABCD”为4,字符数“4”为1

您的字符串长度千差万别正是我们使用VARCHAR()的原因,所以请随意使用VARCHAR(4500),并且请放心,您将只使用尽可能多的空间来存储字符串中的字符,并且在长度上会增加一点额外的空间


有些关联:这就是为什么对没有插入变长字符串的字段使用VARCHAR()不是一个好主意。当字符串的大小已知时,存储它是在浪费空间。例如,
x-xxx-xxx-xxxx
形式的电话号码应该只使用字符(14),因为它总是占用14个字符,并且只需要14个字节。如果改用VARCHAR(14),实际上会使用15个字节。

,您会发现它足够智能。您想“优化”数据的目的是什么?为什么要将4500个字符存储为VARCHAR而不是blob?我被告知要将VARCHAR用于8kb以下的任何内容,而且绝大多数参赛作品少于200个字符。这是难以置信的信息!我在想,设计一个能够动态存储内存的东西是明智的&就是这样。