PDA

View Full Version : خطا در اجرای function



ghafoori
دوشنبه 13 اسفند 1386, 18:38 عصر
من یک تابع در بانکم تعریف کردم برای چک کردن وجود کاربر این هم کدش است


DELIMITER $$

DROP FUNCTION IF EXISTS `login`.`check_user` $$
CREATE FUNCTION `check_user`(v_username char(30)) RETURNS tinyint(1)
BEGIN

declare check_username int default 0;

select count(username) into check_username from tbl_user where username=v_username;

if check_username > 0 then
return true;

else
return false;

end if;

END $$

DELIMITER ;

اما وقتی که کوئری

SELECT check_user(""ali"");
اجرا می کنم این خطا را می دهد


Illegal mix of collations (ucs2_general_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='

لطفا مرا راهنمایی کنید

oxygenws
دوشنبه 13 اسفند 1386, 18:47 عصر
راستش کلا چرا فانکشن نوشتی و پروسیجر ننوشتی؟ (البته من نمی دونم کلا می خواستی چکار کنی و شاید صلاح دونستی فانکشن باشه!)

در مورد مشکلت، اون طوری که میگه به نظر میرسه چون کولیشن مقادیر username و v_username یکی نیستند اشکال می گیره. بهتره کولیشن جفتشون رو
utf8_general_ci بکنی

ghafoori
دوشنبه 13 اسفند 1386, 19:46 عصر
راستش کلا چرا فانکشن نوشتی و پروسیجر ننوشتی؟ (البته من نمی دونم کلا می خواستی چکار کنی و شاید صلاح دونستی فانکشن باشه!)

خوب هدف من این بود که ببینم در بانکم یوزری با این مشخصات در جدولم موجود است یا نه برای همین یک مقدار خروجی می خواست برای همین فانکشن را در نظر گرفتم البته همین کار را با پروسجر را هم نوشتم باز همین خطا را می دهد


در مورد مشکلت، اون طوری که میگه به نظر میرسه چون کولیشن مقادیر username و v_username یکی نیستند اشکال می گیره. بهتره کولیشن جفتشون رو
utf8_general_ci بکنی

مشکل من این است که چه جوری کولیشن را درست کنم من کوئری خود را به این صورت تغییر دادم درست نشد


declare v_username char(30) UNICODE CHARACTER SET utf8 COLLATE utf8_general_ci;
set @v_username="ali";
SELECT check_user(@v_username);

من حتی پارامتر ورودی خود را به این صورت تغییر دادم اما باز همان خطا را می دهد

CREATE FUNCTION `check_user`(v_username nchar(30) ) RETURNS tinyint(1)

oxygenws
دوشنبه 13 اسفند 1386, 21:49 عصر
می تونی از ساختار table ات دامپ بگیری و بذاری اینجا؟

ghafoori
سه شنبه 14 اسفند 1386, 09:31 صبح
خطا برطرف شد یک اشتباه لپی بود من بعد از ایجاد جدول character set جدول را به utf8 تغییر دادم فکر کردم با این کار تمام ستونهای با این کولیشن ذخیره می شود اما این طور نشد و این خطا را می داد با عوض کردن کولشن ستونها بصورت یکی یکی خطا بر طرف شد
اما حالا به یک مشکل دیگر بر خوردم تابع من درست کار نمی کند قاعدتا باید کار کند ولی این تابع جواب درست را نمی دهد
این هم یک کپی از بانک من
15127
از این کوئری که استفاده می کنم

declare v_username char(30) UNICODE CHARACTER SET utf8 COLLATE utf8_general_ci;
set @v_username="ali";
SELECT check_user(@v_username);

در حالی که یوزری با مقدار ali داخل جدول است ولی باز عدد 0 را بر می گرداند