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 '='