2012-02-14 13 views
0

1つのMySQL手順に問題があります。プロシージャ自体は動作しますが、私がラテン文字を使用するときだけです。キリル文字列を使うとうまくいきません。テーブルは私が "SET NAMES 'utf8'"というページの上部にあるutf8_general_ciにあります。この投稿に関するご意見はありがとうございます。以下は私のコードです。MySQLプロシージャ。 LIKEパターンマッチング - キリル文字列

CREATE PROCEDURE `selUsers`(IN usrNme VARCHAR(25)) 
BEGIN 


SELECT * 
    FROM users WHERE 1 
     AND (user_real_name LIKE CONCAT('%', usrNme, '%') OR user_company LIKE CONCAT('%', usrNme, '%') OR user_name LIKE CONCAT('%', usrNme, '%')) 
    ORDER BY user_real_name ASC LIMIT 0, 15; 

    END 

答えて

2

それを動作させるためには、あなたは、クライアントがデータを送信するように設定特定の文字を使用することにMySQLを伝えるために、あなたの開いている接続を選択したデータベースの後SET NAMESを使用する必要があります。詳細はhereをご覧ください。 あなたの特定のケースでは、それは私がutf8_general_ciの代わりにutf8_unicode_ci内使用することになり、また

SET NAMES utf8 

でなければなりません。 utf8_unicode_ciがutf8_general_ciよりも遅いのは当然ですが、より正確な比較ができます... utf8_general_ciはの場合のみ有効です。ロシア語およびブルガリア語キリル文字のサブセット。あなたがそれらのcyrilicアルファベットからの手紙の一部を使用する場合はでベラルーシマケドニアセルビア、およびウクライナを使用し、余分な文字がうまくソートされていません...あなたは心の中にそれを持っている必要があります。

+0

返信いただきありがとうございます。私はそれを感謝します。私は手順を変更しましたが、キリル文字で検索すると結果はありません。以下は新しいコードです。 DELIMITER // 作成プロシージャselUsers(usrNme VARCHAR(25)) BEGIN SET NAMES 'utf8'; SELECT USER_ID、user_real_name、user_company、1 AND CONCAT( '%'、usrNme LIKE(user_real_name、 '%')OR CONCAT( '%'、usrNme、 '%')OR USER_NAME LIKE user_companyユーザからUSER_NAME \t CONCAT( '%'、usrNme、 '%')) \t ORDER BY user_real_name ASC LIMIT 0、15; END // DELIMITER; –

+0

問題はあなたの手続きにあるとは思えませんが、コードからどのように呼び出すのですか?接続を開いたら、SET NAMES utf8コマンドを実行して、それがどのように動作するかを確認します。 –

+0

事前にプロシージャを呼び出すには、SET NAMES utf8を使用してからmysql_query( "CALL selUsers( '"。$ que。 "')");を使用します。ありがとう。 –

関連する問題