2台服务器,2个内存表,不同大小

时间:2011-12-06 18:20:17

标签: mysql memory-table

我有两台运行MySQL实例的服务器。第一个是server1,运行MySQL 5.0.22。另一个是server2,正在运行MySQL 5.1.58。

当我在server1上创建一张内存表时,我会添加一行,其大小会立即8,190.0 KiB

当我在server2上创建一个内存表并添加一行时,其大小仍然只有some bytes

这是由于MySQL版本的差异还是(希望)这是由于我可以改变一些设置?

编辑:

我还没有找到这种行为的原因,但我确实找到了解决方法。因此,对于将来的参考,这就是为我解决的问题:

我的所有记忆表都制作一次,并且从那里开始只读。当您向MySQL指定表的最大行数时,其大小将缩小。以下查询将为您完成此操作。

ALTER TABLE table_name MAX_ROWS = N

1 个答案:

答案 0 :(得分:0)

2倍?

好的,这个问题很可能是由UTF-8和latin1引起的 : - http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

您可以检查两台服务器的数据库连接,数据库默认字符集。

这是我刚刚完成的测试: -

mysql> create table test ( name varchar(10) ) engine
    -> =memory;
Query OK, 0 rows affected (0.03 sec)

mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                   |
+-------+------------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `name` varchar(10) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into test values ( 1 );

mysql> set names utf8;
Query OK, 0 rows affected (0.01 sec)


mysql> create table test2 ( name varchar(10) ) engine =memory default charset = utf8;
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> insert into test2 values ( convert(1 using utf8) );
Query OK, 1 row affected (0.01 sec)

mysql> select table_name, avg_row_length from information_schema.tables where TABLE_NAME in( 'test2', 'test');
+------------+----------------+
| table_name | avg_row_length |
+------------+----------------+
| test       |             12 |
| test2      |             32 |
+------------+----------------+
2 rows in set (0.01 sec)