0

我有两台服务器都运行 MySQL 实例。第一个服务器 1 正在运行 MySQL 5.0.22。另一个 server2 正在运行 MySQL 5.1.58。

当我创建一个内存表server1并添加一行时,它的大小是立即的8,190.0 KiB

当我创建一个内存表server2并添加一行时,它的大小仍然是 only some bytes

这是由 MySQL 版本的差异引起的,还是(希望)这是由于我可以更改的某些设置?

编辑:

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

我所有的内存表都是一次制作的,并且从那里开始是只读的。当您向 MySQL 指定表将拥有的最大行数时,它的大小将缩小。以下查询将为您执行此操作。

ALTER TABLE table_name MAX_ROWS = N
4

1 回答 1

0

因数 2?

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

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

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

mysql> 创建表测试(名称 varchar(10))引擎
    -> =内存;
查询正常,0 行受影响(0.03 秒)

mysql> 显示创建表测试;
+--------+------------------------------ -------------------------------------------------- -----+
| 表 | 创建表 |
+--------+------------------------------ -------------------------------------------------- -----+
| 测试 | 创建表`测试`(
  `name` varchar(10) 默认 NULL
) 引擎=内存默认字符集=latin1 |
+--------+------------------------------ -------------------------------------------------- -----+
一组中的 1 行(0.00 秒)

mysql> 插入测试值(1);

mysql> 设置名称 utf8;
查询正常,0 行受影响(0.01 秒)


mysql> create table test2 (name varchar(10)) engine =memory default charset = utf8;
查询正常,0 行受影响(0.01 秒)

查询正常,0 行受影响(0.01 秒)

mysql> 插入 test2 值(转换(1 使用 utf8));
查询正常,1 行受影响(0.01 秒)

mysql> select table_name, avg_row_length from information_schema.tables where TABLE_NAME in('test2', 'test');
+------------+----------------+
| 表名 | avg_row_length |
+------------+----------------+
| 测试 | 12 |
| 测试2 | 32 |
+------------+----------------+
2 行(0.01 秒)
于 2011-12-07T15:04:04.267 回答