su - root 报su: incorrect password的错误

本文探讨了在Linux系统中遇到的su: incorrect password错误,尝试了修改/bin/su和/etc/passwd权限、加入wheel组等方法未果。最终通过复制其他服务器上正常使用的/etc/pam.d/su和system-auth文件解决了问题。

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

linux中普通用户su root用户,输入正确的密码,报su:incorrect password错误,网上各种查看/bin/su,/etc/passwd权限问题,什么加入到wheel组,都试过了,不行。现在还要可以试一个方法,就是把另外服务器可以正常su root的/etc/pam.d/下su文件和system-auth文件copy过来,就可以了。
<think>嗯,用户遇到了MySQL插入数据时出现的日期时间格式错误,具体是“Data truncation Incorrect datetime value '2025-03-09 02:34:50.985' for column 'create_time’”。我需要先分析这个问题可能的原因。首先,考虑MySQL的datetime类型支持的格式和范围。MySQL的datetime类型范围是从1000-01-01 00:00:00到9999-12-31 23:59:59,所以2025年在这个范围内,应该没问题。那可能是小数点后的毫秒部分的问题,因为datetime类型在MySQL 5.6.4之前是不支持毫秒精度的,之后的版本支持,但需要指定精度,比如datetime(3)来存储三位毫秒。如果用户使用的版本较旧,或者字段定义时没有指定精度,那么插入带毫秒的时间值就会出错。 接下来,检查用户的字段定义。如果create_time字段定义为datetime而没有指定小数秒精度,那么插入带有.985毫秒的值会被截断,导致错误。解决方案可以是修改字段定义,添加精度,或者插入前去除毫秒部分。另外,还要检查SQL_MODE是否包含严格模式,如果启用了严格模式,那么截断会导致错误,否则可能只是警告,数据被截断后插入。 此外,用户可能使用了错误的格式,比如在插入时没有正确使用字符串引号,或者使用了不同分隔符。但根据错误信息中的值,格式看起来是正确的。时区问题也可能导致时间转换错误,但一般不会导致这种错误。还有可能是应用程序中的时间生成有问题,比如超出范围的时间值,但2025年显然在范围内。因此,主要问题可能在于毫秒部分和字段定义不匹配。 可能的解决步骤:首先确认MySQL版本,如果是5.6.4及以上,修改字段为datetime(3);或者去除毫秒部分,使用CAST或者字符串处理。另外,检查SQL_MODE,如果严格模式导致错误,可以调整,但这不推荐,因为会影响其他操作。还可以修改应用程序中的时间生成,去掉毫秒或者格式化为正确的字符串。 需要提醒用户注意版本兼容性和修改字段可能带来的影响,比如需要ALTER TABLE操作,可能需要停机时间。同时,如果应用需要毫秒精度,升级MySQL版本并调整字段类型是更好的选择。</think>### 解决MySQL插入日期时间格式错误的步骤 #### 1. **确认字段定义与MySQL版本** - **datetime字段精度问题**:MySQL在5.6.4版本后支持毫秒精度,但需显式定义。例如,存储3位毫秒需使用`datetime(3)`[^1]。 - **检查字段定义**: ```sql SHOW CREATE TABLE 表名; ``` 若结果为`datetime`而非`datetime(3)`,则需修改字段: ```sql ALTER TABLE 表名 MODIFY create_time datetime(3); ``` #### 2. **处理输入数据的毫秒部分** - **方案1:截断毫秒** 插入前通过`CAST()`函数移除毫秒: ```sql INSERT INTO 表名 (create_time) VALUES (CAST('2025-03-09 02:34:50.985' AS datetime)); ``` - **方案2:代码层格式化** 在应用程序中格式化时间为`YYYY-MM-DD HH:mm:ss`(无毫秒)或`YYYY-MM-DD HH:mm:ss.sss`(需字段支持)。 #### 3. **检查SQL_MODE设置** - 若启用了严格模式(如`STRICT_TRANS_TABLES`),会阻止截断操作: ```sql SELECT @@sql_mode; ``` 临时禁用严格模式(需谨慎): ```sql SET sql_mode = ''; ``` #### 4. **验证数据插入** - 测试插入无毫秒的时间: ```sql INSERT INTO 表名 (create_time) VALUES ('2025-03-09 02:34:50'); ``` - 若成功,说明原问题由毫秒精度导致。 --- ### 总结原因 错误源于**字段定义与时间格式不匹配**: - 低版本MySQL(<5.6.4)不支持毫秒。 - 高版本未显式定义精度(如`datetime(3)`)。 - 严格模式拒绝自动截断。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值