Эффективный способ индексировать столбец таблицы MySQL с помощью кодировки utf8 - PullRequest
2 голосов
/ 08 августа 2010
CREATE TABLE profile_category (
  id mediumint UNSIGNED NOT NULL AUTO_INCREMENT,
  pc_name char(255) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY idx_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Это одна из таблиц в базе данных, которая полностью находится в кодировке utf8.Проблема здесь (и я не знал об этом до сих пор), что индекс для столбца pc_name будет втрое больше, потому что MySQL резервирует 3 укуса для каждого символа.В этом случае индексы займут гораздо больше места.

Я не могу сделать более короткий индекс, потому что мне нужно, чтобы это значение было уникальным.Можно было бы установить одно из решений pc_name char(255) CHARSET latin1 NOT NULL,, но я не знаю, является ли это проблемой или нет.Это хорошая идея, или есть какие-то решения, которые я не знаю?

Обновление: столбец pc_name проверен в приложении, чтобы быть действительным utf8.И это позволяет не западные символы.Но в этом случае я могу просто заключить сделку и разрешить только /[_A-Za-z]/, если дело того стоит.

Обновление 2: я пытался установить pc_name на кодировку latin1, но теперь я получаю исключения, такие как: Zend_Db_Statement_Exception: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

1 Ответ

0 голосов
/ 08 августа 2010

Если pc_name будет содержать не-западный текст, тогда latin1 здесь не будет опцией - иначе, пойдите.

Я не хардкорный MySQL'er, я не знаюесли смешивание таблиц InnoDB и MySQL чревато проблемами - если нет, возможно, вы могли бы сделать эту таблицу стандартной таблицей MySQL и оставить ее как utf8?

...