Có, MySQL bảo toàn môi trường (environment) tại thời điểm tạo stored procedure. Ví dụ: dùng || để nối chuỗi - chỉ hợp lệ khi sql_mode='ansi'. Nếu đổi sang non-ansi sau khi tạo, thủ tục cũ vẫn chạy như cũ.
Ví dụ
mysql> SET sql_mode = 'ansi'; Query OK, 0 rows affected, 1 warning (0.14 sec) mysql> CREATE PROCEDURE Con_string() SELECT 'a'||'b'; Query OK, 0 rows affected (0.12 sec) mysql> CALL Con_string(); +----------+ | 'a'||'b' | +----------+ | ab | +----------+ mysql> SET sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> CALL Con_string(); -- vẫn chạy được +----------+ | 'a'||'b' | +----------+ | ab | +----------+
Nhưng thủ tục mới tạo sau khi đổi mode sẽ không chấp nhận ||:
mysql> CREATE PROCEDURE Con_string1() SELECT 'a'||'b'; Query OK, 0 rows affected (0.02 sec) mysql> CALL Con_string1(); +----------+ | 'a'||'b' | +----------+ | 0 | -- || được hiểu là OR logic, 'a' và 'b' đều true → 1, nhưng hiển thị 0? Có thể do cảnh báo +----------+