使用utf8字符集索引MySQL表列的有效方法

时间:2010-08-08 19:12:14

标签: mysql mysql-error-1267

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 :(得分:0)

如果pc_name将包含非西方文本,那么latin1将不会是一个选项 - 否则,请选择它。

不是一个核心的MySQL'er,我不知道混合InnoDB和MySQL表是否充满了问题 - 如果没有,也许你可以把这个表作为标准的MySQL表并保留为utf8?