MySQL は固有のフィールドの末尾の空白をどのように処理しますか?またその回避策は何ですか?

Susan Sarandon
リリース: 2024-10-31 20:59:29
オリジナル
756 人が閲覧しました

How Does MySQL Handle Trailing Whitespace in Unique Fields and What Are the Workarounds?

MySQL データベースは、末尾の空白なしで一意のフィールドを保存します

問題:

MySQL データベースでは、一意のフィールドは次のことを保証する必要があります。 2 つの行が同じ値を持つことはありません。ただし、末尾に空白があるデータを一意のフィールドに挿入すると、空白は無視されるため、重複した値が格納される可能性があります。これは、ユーザー入力の先頭と末尾の空白を保持する必要がある場合に問題を引き起こします。

解決策:

根本的な問題は、文字列比較における末尾の空白の MySQL の処理に起因します。 。すべての MySQL 照合順序は PADSPACE 型です。これは、CHAR フィールドと VARCHAR フィールドの両方で末尾のスペースが無視されることを意味します。この動作は、一貫した文字列比較を保証することを目的としていますが、末尾の空白を保持する必要性と矛盾します。

この問題を解決するには、主に 2 つの解決策があります。

1.データを VARBINARY として保存する:

CHAR や VARCHAR などのテキストベースのデータ型を使用する代わりに、データを VARBINARY として保存することを検討してください。 VARBINARY はデータをバイトのシーケンスとして格納し、末尾の空白を含むすべての文字を保持します。これにより、一意のフィールドが空白を含む正確な値に基づいて確実に一意性を実現します。

例:

<code class="sql">CREATE TABLE test_ws ( `value` VARBINARY(255) UNIQUE );</code>
ログイン後にコピー

2. NO PAD 照合を使用する (MySQL 8.0 以降):

MySQL バージョン 8.0 以降では、NO PAD 照合が導入されました。これらの照合順序では、文字列比較中に末尾の空白を含む埋め込み文字が無視されます。 NO PAD 照合を使用すると、末尾の空白を含む正確な値に基づいて一意性を強制できます。

例:

<code class="sql">CREATE TABLE test_ws ( `value` VARCHAR(255) UNIQUE COLLATE utf8mb4_0900_ai_ci );</code>
ログイン後にコピー

注: NO PAD 照合フィールドに基づいてデータを並べ替えると、認識される文字シーケンスではなくバイト値に基づいて並べ替えが行われるため、予期しない結果が生じる可能性があります。

以上がMySQL は固有のフィールドの末尾の空白をどのように処理しますか?またその回避策は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!