utf8文字セットを使用してMySQLテーブル列にインデックスを付ける効率的な方法

mysql mysql-error-1267
utf8文字セットを使用してMySQLテーブル列にインデックスを付ける効率的な方法
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;

これは、データベース内のテーブルの1つであり、完全にutf8文字セットです。 問題はここにあります(これまで私はそれについて新しいことはしませんでした) `pc_name`カラムのインデックスは、MySQLがすべての文字に対して3バイトを予約するため、3倍大きくなります。 この場合、インデックスにはさらに多くのスペースが必要です。

この値を一意にする必要があるため、インデックスを短くすることはできません。 解決策の1つは「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 collat​​ions(latin1_swedish_ci、IMPLICIT)and(utf8_general_ci、COERCIBLE)for operation ‘=’ `

  2  0


ベストアンサー

pc_nameに非西洋のテキストが含まれる場合、latin1はここではオプションになりません。そうでない場合は、それを選択します。

筋金入りのMySQL’erではないので、InnoDBとMySQLテーブルの混在に問題があるかどうかはわかりません。

0


タイトルとURLをコピーしました