MySQL Error 1231 – SQLSTATE: 42000 (ER_WRONG_VALUE_FOR_VAR) occurs when you attempt to assign an incorrect value to a system variable. The error message
Variable '%s' can't be set to the value of '%s' specifies the variable in question and the value that caused the issue.
Understanding Error 1231 in MySQL
System variables in MySQL have specific value ranges and types that they accept. If you assign a value that is outside of the acceptable range or of an incorrect type, MySQL will reject the assignment and throw Error 1231.
Diagnosing the Issue
To diagnose this error, you need to:
- Identify the Variable and Value: Look at the error message to determine which variable is being set and what value is being rejected.
- Check Variable’s Accepted Values: Consult the MySQL documentation or use the
SHOW VARIABLEScommand to understand the acceptable values and types for the variable.
Fixing Error 1231
Here are several examples of incorrect variable assignments that can lead to Error 1231, along with explanations and corrected sample code:
- Setting SQL Mode Incorrectly:
SQL mode affects the SQL syntax MySQL supports and the data validation checks it performs. Setting it to an unrecognized value will result in Error 1231. Incorrect usage:
SET sql_mode = 'STRICT_ALL_TABLES,NO_SUCH_MODE';
SET sql_mode = 'STRICT_ALL_TABLES';
Only set sql_mode to valid SQL mode values.
- Assigning Wrong Value Types:
Assigning a string to a variable that expects a numerical value can cause this error. Incorrect usage:
SET max_connections = 'unlimited';
SET max_connections = 1000;
Use numeric values for variables that expect numbers.
- Setting Out of Range Values:
Trying to set a variable to a value outside its valid range will trigger Error 1231. Incorrect usage:
SET wait_timeout = -1;
SET wait_timeout = 28800;
Ensure the value is within the documented range for the variable.
- Using Incorrect Variable Names:
Mistyping a variable name or using a variable that does not exist will result in an error. Incorrect usage:
SET max_connect_errors = 100;
SET max_connect_errors = 100;
Ensure that the variable name is spelled correctly.
- Setting Read-Only Variables:
Attempting to set a read-only variable, such as
version, will cause Error 1231. Incorrect usage:
SET version = '5.7.28';
There is no corrected usage for setting read-only variables. Instead, you should not attempt to set them as they are managed by MySQL.
When encountering Error 1231, carefully review the variable and value you are trying to set. Refer to the MySQL documentation for the correct usage and acceptable values for system variables. Adjust your SQL statements accordingly to ensure that variable assignments are valid. If you continue to face issues after making corrections, consider seeking further assistance from MySQL resources or a database administrator. Properly setting system variables is essential for the optimal operation of your MySQL server, so take the time to understand and apply the correct settings.