2 сервера, 2 таблицы памяти, разные размеры

У меня есть два сервера, на которых работает экземпляр 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 ответ

Фактор 2?

ОК, проблема, вероятно, вызвана UTF-8 против латинского 1
: - http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

Вы можете проверить соединение с базой данных, набор символов по умолчанию для обоих серверов.

Вот тестирование, которое я только что сделал:

mysql> создать таблицу test ( name varchar(10)) engine
    -> =memory; Запрос в порядке, затронуто 0 строк (0, 03 с)

mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------+
| Таблица | Создать таблицу | + ------- + ----------------------------------------- -------------------------------------------------- ----- + | тест | CREATE TABLE `test` (
  `name` varchar(10) DEFAULT NULL) ENGINE= ПАМЯТЬ ПАМЯТИ ПО УМОЛЧАНИЮ =latin1 |
+-------+------------------------------------------------------------------------------------------------+
1 строка в наборе (0, 00 с) mysql> вставить в тестовые значения ( 1);

mysql> установить имена utf8; Запрос в порядке, затронуто 0 строк (0, 01 с) mysql> создать таблицу test2 (имя varchar(10)) engine = память по умолчанию charset = utf8; Запрос в порядке, затронуто 0 строк (0, 01 с) Запрос в порядке, затронуто 0 строк (0, 01 с) mysql> вставить в значения test2 (преобразовать (1 с использованием utf8)); Запрос в порядке, 1 строка затронута (0, 01 с) mysql> выберите имя_таблицы, avg_row_length из information_schema.tables, где TABLE_NAME в ( 'test2', 'test');
+------------+----------------+
| имя_таблицы | avg_row_length |
+------------+----------------+
| тест |             12 |
| test2      |             32 |
+------------+----------------+
2 строки в наборе (0, 01 с)
Другие вопросы по тегам