2 сервера, 2 таблицы памяти, разные размеры - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть два сервера, на которых работает экземпляр MySQL.Первый, server1, работает под управлением MySQL 5.0.22.Другой, server2, работает под управлением MySQL 5.1.58.

Когда я создаю таблицу памяти на server1 и добавляю строку, ее размер мгновенно равен 8,190.0 KiB.

Когда ясоздайте таблицу памяти на server2, и я добавляю строку, размер которой по-прежнему равен some bytes.

Это вызвано различием в версии MySQL или (надеюсь) связано с некоторыми настройками Iможет измениться?

РЕДАКТИРОВАТЬ:

Я еще не нашел причину этого поведения, но я нашел обходной путь.Итак, для будущих ссылок это то, что исправило это для меня:

Все мои таблицы памяти сделаны один раз и доступны только для чтения.Когда вы указываете в MySQL максимальное количество строк в вашей таблице, ее размер будет уменьшаться.Следующий запрос сделает это за вас.

ALTER TABLE table_name MAX_ROWS = N

1 Ответ

0 голосов
/ 07 декабря 2011

Коэффициент 2?

ОК, проблема, вероятно, вызвана UTF-8 против латинского1
: - 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)
...