mysql - 縮小との照合を使用する場合のMySQL文字列プレフィックスの一致

原文 mysql collation string-comparison

私は、縮約(つまり、単一の重みを持つものとして定義された複数の文字のシーケンス)を使用した照合を利用するカスタムMySQL照合を持っています。簡単な例として、このルールのようなものを定義しました:

<collation name="utf8_my_custom_collation_ci" id="1200">
  <rules>
    <reset>c</reset>
    <p>ch</p>
    <reset>ch</reset>
    <p>d</p>
  </rules>
</collation>


これは、「ch」を「C」の後と「D」の前に完全に別の文字であるかのように照合し、cz
今、私の質問は、「C」と「CH」を別々の文字として扱いながら、一般的な方法で部分文字列比較を実行するにはどうすればよいですか?たとえば、私はによって返されるセットが欲しい

SELECT word WHERE word LIKE 'c%';
SELECT word WHERE word LIKE 'ch%';


完全にばらばらになります。

これは、 "NOT LIKE"ステートメントを追加することで実現できることを理解していますが、各クエリに照合ロジック全体を本質的に埋め込むことなしには実現できません。照合でこのような短縮が10以上定義されている場合、手動でそれらすべてを一連の条件に含め、LIKEではないようにする必要はありません。

問題がある場合は、MySQL 5.6を使用しています。
答え
'cz' <'ch'とおっしゃるように、私は通常、イニシャル[x]による縮約は 'xa'および 'xz'の範囲外であると想定しています。したがって、[x]と切り捨てを検索するには、一般的な除外を追加できます。

SELECT word WHERE word LIKE '[x]%' AND word > '[x]a%' AND word < '[x]z%'


あなたの収縮の説明から、これはそれらすべてにうまくいくはずです。
関連記事

mysql - MySQLInstallerConsole.exeとchaning datadirを使用したMYSQL 5.6.21のインストール

php - PHPを使用して複数のリストボックス値がMySQLデータベースに挿入されない

php - as3はPDOを使用してPHPにデータを送信します

php - 前のクエリの値を使用してより多くの結果を取得する

php - php mysql jQueryによる連鎖選択

php - 列の結果を変数に格納する

php - mysqlでの結合操作とともに、3つの列(city + streetaddress + state)の値に基づいて類似の住所レコードを選択します

mysql - 未定義の関数ejabberd_logger:info_msgの呼び出し

php - このMySQL外部選択がクエリの速度を低下させる理由を理解する

php - PHP / MySQLiの複数のSQLオブジェクト