Mysql 使用PASSSWORD函数生成密码报错:Data too long for column 'password'

博客讲述了MySQL使用PASSWORD函数生成密码时的报错问题,密码‘0913’在char最大长度32位时插入报错。通过查看sql_mode,将其改成宽松的ANSI模式后成功插入。严格模式下密码超32位,宽松模式会截断密码存入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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位,宽松模式下会截断密码存入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值