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 '='
答案 0 :(得分:0)
如果pc_name将包含非西方文本,那么latin1将不会是一个选项 - 否则,请选择它。
不是一个核心的MySQL'er,我不知道混合InnoDB和MySQL表是否充满了问题 - 如果没有,也许你可以把这个表作为标准的MySQL表并保留为utf8?