4

mysql に「キーワード」を格納するために varchar(255) を使用します。mysql が "=". 「like」比較では末尾のスペースを尊重しますが、「UNIQUE」インデックスがある場合、varchar 列に末尾のスペースがある場合とない場合で同じ単語を格納することはできません。

そのため、varbinary への切り替えを検討しています。列の値にマルチバイト文字が含まれている場合の影響を示唆できる人はいますか?

4

3 に答える 3

0

これは、MySQL のマニュアルで末尾のスペースについて次のように述べられています。

末尾のスペースの処理はバージョンに依存します。MySQL 5.0.3 では、標準 SQL に準拠して、値が格納および取得されるときに末尾のスペースが保持されます。MySQL 5.0.3 より前では、値が VARCHAR カラムに格納されるときに値から末尾のスペースが削除されました。これは、検索された値にもスペースがないことを意味します。

あなたの質問は、MySQL は末尾のスペースを認識しないと言っているので、あなたのバージョンは 5.0.3 よりも古いと思います。列に TEXT タイプを使用することを検討してください。これらは末尾のスペースを保持します。文字列のエンコードとデコードは TEXT が処理するので、マルチバイト文字について心配する必要はありません。

TEXT は、VARBINARY よりもパフォーマンスが遅くなります。実際のデータがパフォーマンスが許容できないことを示している場合は、VARBINARY (または BLOB) を選択する必要があるかもしれませ。すべてのクライアントが同じエンコーディングを使用している限り、これはマルチバイト文字に対してうまく機能します。異なる地域設定でクライアントをテストしてください:)

于 2009-06-10T08:16:17.497 に答える
0

末尾のスペースの問題に加えて、MySQL の UNIQUE INDEX は 767 バイトに制限されます (3 バイトの UTF8 では 767/3 ~= 255 になります)。以下も参照してください。

于 2011-05-11T18:39:49.390 に答える