Mysql 使用PASSSWORD函数生成密码报错,ERROR 1406 (22001): Data too long for column ‘password’ at row 1。
其中密码为‘0913’,设置的char最大长度为32位字符。
mysql> desc bank;
+———-+——————+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———-+——————+——+—–+———+——-+
| name | char(10) | NO | | NULL | |
| money | int(10) unsigned | NO | | NULL | |
| password | char(32) | NO | | NULL | |
+———-+——————+——+—–+———+——-+
3 rows in set (0.00 sec)
mysql> update bank set password=PASSWORD(‘0913’) where name=’test’;
ERROR 1406 (22001): Data too long for column ‘password’ at row 1
报错密码太长。
+—————+—————————————————————-+
| Variable_name | Value |
+—————+—————————————————————-+
| sql_mode | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+—————+—————————————————————-+
将sql_mode改成ANSI 即宽松:
mysql> set sql_mode=ANSI;
Query OK, 0 rows affected, 1 warning (0.00 sec)
生成密码插入:
mysql> update bank set password=PASSWORD(‘0913’) where name=’test’;
Query OK, 1 row affected, 2 warnings (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 2
同样的密码:PASSWORD(‘0913’), char(32)和char(255) 是
*4AB43C6AA70B866AF8D486905C9D042 |
| *4AB43C6AA70B866AF8D486905C9D042227ACF715
说明严格模式下密码确实超过了32位,宽松模式下会截断密码存入。