0
CREATE SCHEMA IF NOT EXISTS `utftest`  DEFAULT CHARACTER SET utf16;
CREATE  TABLE IF NOT EXISTS `metadata_labels` (`metadata_id` INT NOT NULL , `label` VARCHAR(256) NOT NULL ,  PRIMARY KEY (`metadata_id`, `label`));

ただし、次のエラーメッセージが表示されます。

Specified key was too long; max key length is 767 bytes

お知らせ下さい

4

2 に答える 2

1

UTF 16は、MySQLで1文字あたり32ビット(4バイト)を使用します。4 x256>767

可能であれば、VARCHARキーにUTF16以外のものを使用することをお勧めします。

于 2013-02-12T23:46:13.833 に答える
1

3 x 256 + 4 = 772UTF8では、バイトが必要になります。UTF16はさらに25%多くかかります。

非常に広い主キーは使用しないでください。インデックスを効率的にするには、各インデックスのストレージを最小限に抑える必要があります。

重複を防ぐ必要がある場合は、コンテンツのハッシュ(sha1など)を含む計算フィールドを追加し、代わりに一意の制約を作成することをお勧めします。

latin1または、フィールドの文字エンコードとして使用してlabel、バイト数をに減らします256 + 4 = 300

Unicodeが必須であり、ハッシュが画像から外れている場合は、列をUTF8(250文字)またはUTF16(190文字)のいずれかに減らす必要があります。

于 2013-02-12T23:51:05.103 に答える