ストアドプロシージャパラメータのデフォルトの照合は、utf8_general_ci
です。 照合を混在させることはできないため、次の4つのオプションがあります。
オプション1 :COLLATE
を追加します 入力変数へ:
SET @rUsername = ‘aname’ COLLATE utf8_unicode_ci; -- COLLATE added
CALL updateProductUsers(@rUsername, @rProductID, @rPerm);
オプション2 :COLLATE
を追加します WHERE
へ 条項:
CREATE PROCEDURE updateProductUsers(
IN rUsername VARCHAR(24),
IN rProductID INT UNSIGNED,
IN rPerm VARCHAR(16))
BEGIN
UPDATE productUsers
INNER JOIN users
ON productUsers.userID = users.userID
SET productUsers.permission = rPerm
WHERE users.username = rUsername COLLATE utf8_unicode_ci -- COLLATE added
AND productUsers.productID = rProductID;
END
オプション3 :IN
に追加します パラメータ定義(MySQL 5.7より前):
CREATE PROCEDURE updateProductUsers(
IN rUsername VARCHAR(24) COLLATE utf8_unicode_ci, -- COLLATE added
IN rProductID INT UNSIGNED,
IN rPerm VARCHAR(16))
BEGIN
UPDATE productUsers
INNER JOIN users
ON productUsers.userID = users.userID
SET productUsers.permission = rPerm
WHERE users.username = rUsername
AND productUsers.productID = rProductID;
END
オプション4 :フィールド自体を変更します:
ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;
Unicode順にデータを並べ替える必要がない限り、すべてのテーブルを変更して utf8_general_ci
を使用することをお勧めします。 コードを変更する必要がなく、ソートがわずかに高速化されるため、照合。
更新 :utf8mb4 / utf8mb4_unicode_ciが、推奨される文字セット/照合方法になりました。パフォーマンスの向上はごくわずかであるため、utf8_general_ciは使用しないことをお勧めします。 https://stackoverflow.com/a/766996/1432614 を参照してください