在執行 MySQL 的 Stored Procedures 時,因參數帶入中文而有這樣的錯誤訊息。
Example:改成這樣寫
DELIMITER $$
CREATE PROCEDURE `ls_cn_sp_getadminuser`(
IN `_admin_account` VARCHAR(255),
IN `_admin_password` VARCHAR(255))
begin
# 撈出該 adminUser 的資料
SELECT *
FROM `ls_cn_admin_user`
WHERE `admin_account` = _admin_account COLLATE utf8_unicode_ci
AND `admin_password` = _admin_password COLLATE utf8_unicode_ci;END
簡單來說是跟語系的設定有關,但不管我怎麼修改 database 的 charset 或是 table 的語系,依舊沒有解決這樣的問題,因此在 stored procedures 裡面加了 COLLATE 的語法。
要注意的是 COLLATE 不是加在參數設定的地方,而是在 WHERE = 時為該 field 設定 COLLATE utf8_unicode_ci 的設定。
Example: 不能這樣寫
如果將 COLLATE 的設定寫在參數的地方,MySQL 將會回傳 Error 1235: This version of MySQL doesn't yet support 'COLLATE with no CHARACTER SET in SP parameters,... 的訊息。
DELIMITER $$
CREATE PROCEDURE `ls_cn_sp_getadminuser`(
IN `_admin_account` VARCHAR(255) COLLATE utf8_unicode_ci,
IN `_admin_password` VARCHAR(255)COLLATE utf8_unicode_ci
)
begin
# 撈出該 adminUser 的資料
SELECT *
FROM `ls_cn_admin_user`
WHERE `admin_account` = _admin_account
AND `admin_password` = _admin_password;
END
CREATE PROCEDURE `ls_cn_sp_getadminuser`(
IN `_admin_account` VARCHAR(255)
IN `_admin_password` VARCHAR(255)
)
begin
# 撈出該 adminUser 的資料
SELECT *
FROM `ls_cn_admin_user`
WHERE `admin_account` = _admin_account
AND `admin_password` = _admin_password;
END
Example:改成這樣寫
DELIMITER $$
CREATE PROCEDURE `ls_cn_sp_getadminuser`(
IN `_admin_account` VARCHAR(255),
IN `_admin_password` VARCHAR(255))
begin
# 撈出該 adminUser 的資料
SELECT *
FROM `ls_cn_admin_user`
WHERE `admin_account` = _admin_account COLLATE utf8_unicode_ci
AND `admin_password` = _admin_password COLLATE utf8_unicode_ci;END
沒有留言:
張貼留言
若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD