mysql-ERROR 1264/1292/1366

背景

select @@version;

# @@version

'5.7.41-log'

select @@sql_mode;

# @@sql_mode

'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

举例

drop table test2;

create table test2 (

 id1 decimal(1,1),

 id2 decimal(2,1)

 );

insert into test2 values(0,'你好');

Error Code: 1366. Incorrect decimal value: '你好' for column 'id2' at row 1

insert into test2 values(0,cast('你好'as decimal(2,1)));

Error Code: 1292. Truncated incorrect DECIMAL value: '你好'

insert into test2 values(0,cast(replace('你好','好','')as decimal(2,1)));

Error Code: 1366. Incorrect DECIMAL value: '0' for column '' at row -1

insert into test2 values(0,111);

Error Code: 1264. Out of range value for column 'id2' at row 1

insert into test2 values(0,cast('1.1' as decimal(2,1)));

1 row(s) affected

insert into test2 values(0,convert('1.011', decimal(2,1)));

1 row(s) affected

说明

Decimal 默认最大位数(精度,precision)是 10 ,默认小数点位数(scale)是 0 。

最大位数(精度,precision) M 范围为 1 到 65 ,小数点位数(scale) D 范围为 0 到 30 ,整数位数为(M - D),小数点位数为 D 。

Decimal 使用 二进制格式存储。

————————————————

中文、字母、符号无法转换成定点数

步骤:定位错误,修改错误...

<think>嗯,用户现在遇到了在初始化MySQL时出现的两个错误。第一个是找不到错误消息文件`errmsg.sys`,第二个是数据目录中已经有文件,导致初始化失败。我需要帮他分析这两个问题的原因,并提供解决方案。 首先,关于第一个错误,错误信息指出`/home/soft/mysql-5.7/share/errmsg.sys`不存在。这可能是因为MySQL的安装路径不正确,或者相关的文件没有被正确解压或安装。用户可能手动安装了MySQL二进制包,但路径配置有问题。需要检查`basedir`是否指向正确的目录,并确认`share`目录下是否存在必要的文件。 第二个错误是说数据目录不为空,初始化被中止。用户可能在之前已经尝试过初始化,或者数据目录中残留了旧的文件。这时候需要清理数据目录,或者如果里面有重要数据,需要先备份再处理。 接下来,我需要分步骤解决这两个问题。首先确认`basedir`是否正确,然后检查`share`目录是否存在`errmsg.sys`。如果路径错误,需要调整初始化命令中的`--basedir`参数。如果文件确实缺失,可能需要重新解压安装包或下载正确的版本。 对于数据目录不为空的问题,用户需要确保数据目录是空的,可以手动删除里面的内容,但要注意是否有重要数据。同时,检查`my.cnf`中的配置,确保没有指向错误的数据目录。 另外,可能还需要确认用户是否有足够的权限,比如`mysql`用户对相关目录的读写权限,以及SELinux或AppArmor是否阻止了访问,但这可能在后续步骤中处理。 用户可能之前尝试过多次初始化,但没有清理数据目录,导致问题累积。需要提醒用户在初始化前确保数据目录为空,并正确设置所有路径参数。如果用户是通过手动安装的MySQL,可能需要指导他们正确配置环境变量或服务文件,避免路径错误。 最后,可能需要建议用户使用官方仓库安装MySQL,以避免手动安装带来的路径和依赖问题,但这取决于用户的具体需求。</think>--- ### 一、错误原因解析 你执行的初始化命令: ```bash ./bin/mysqld --initialize --user=mysql --basedir=/home/soft/mysql-5.7/ --datadir=/home/soft/mysql-5.7/data/ ``` 触发了两个关键错误: #### 错误1:`ERROR] Can't find error-message file` - **根本原因**:MySQL初始化时无法找到国际化错误消息文件`errmsg.sys`。 - **路径问题**: ```bash ls -l /home/soft/mysql-5.7/share/errmsg.sys ``` - 如果文件不存在 → **安装包不完整**或**basedir路径错误** - 如果文件存在 → **lc-messages-dir参数未正确配置** #### 错误2:`data directory has files in it` - **直接原因**:`/home/soft/mysql-5.7/data/`目录非空(可能包含残留文件或历史数据) --- ### 二、分步解决方案 #### 步骤1:修复`errmsg.sys`缺失问题 1. **确认MySQL安装包完整性**: ```bash # 检查解压后的目录结构 ls -l /home/soft/mysql-5.7/share/ | grep errmsg.sys ``` - **若缺失**:重新下载官方二进制包([MySQL 5.7 Downloads](https://downloads.mysql.com/archives/community/)),确保解压完整: ```bash tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz --check ``` 2. **强制指定错误消息路径**: ```bash ./bin/mysqld --initialize --user=mysql \ --basedir=/home/soft/mysql-5.7/ \ --datadir=/home/soft/mysql-5.7/data/ \ --lc-messages-dir=/home/soft/mysql-5.7/share/ # 显式声明路径 ``` #### 步骤2:清理数据目录 1. **备份现有数据**(如果重要): ```bash mv /home/soft/mysql-5.7/data /home/soft/mysql-5.7/data_backup_$(date +%Y%m%d) ``` 2. **新建空数据目录**: ```bash mkdir -p /home/soft/mysql-5.7/data chown -R mysql:mysql /home/soft/mysql-5.7/data ``` #### 步骤3:修正权限与SELinux(仅RockLinux) 1. **递归授权**: ```bash chown -R mysql:mysql /home/soft/mysql-5.7/ chmod 750 /home/soft/mysql-5.7/data ``` 2. **处理SELinux限制**: ```bash semanage fcontext -a -t mysqld_db_t "/home/soft/mysql-5.7/data(/.*)?" restorecon -Rv /home/soft/mysql-5.7/data ``` #### 步骤4:重新执行初始化 ```bash ./bin/mysqld --initialize --user=mysql \ --basedir=/home/soft/mysql-5.7/ \ --datadir=/home/soft/mysql-5.7/data/ \ --lc-messages-dir=/home/soft/mysql-5.7/share/ ``` - **成功标志**:输出中包含临时密码: ``` [Note] A temporary password is generated for root@localhost: XXXXXXXXXX ``` --- ### 三、验证与后续操作 1. **启动MySQL服务**: ```bash ./bin/mysqld_safe --user=mysql --datadir=/home/soft/mysql-5.7/data/ & ``` 2. **登录并修改密码**: ```bash mysql -u root -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword'; ``` --- ### 四、关键配置检查表 | 配置文件 | 必须包含的条目 | 验证命令 | |-------------------|---------------------------------------|----------------------------| | `my.cnf` | `basedir=/home/soft/mysql-5.7` | `grep basedir /etc/my.cnf` | | | `datadir=/home/soft/mysql-5.7/data` | `grep datadir /etc/my.cnf` | | `mysqld.service` | `EnvironmentFile=-/etc/sysconfig/mysql` | `systemctl cat mysqld` | --- ### 五、常见陷阱规避 1. **避免手动指定路径**:建议通过`ln -s`创建软链接到标准路径: ```bash ln -s /home/soft/mysql-5.7 /usr/local/mysql ``` 2. **使用官方启动脚本**:复制`support-files/mysql.server`到`/etc/init.d/`: ```bash cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld ``` --- 通过以上操作可系统性地解决初始化错误。如果问题依然存在,请提供以下信息进一步分析: 1. `ls -l /home/soft/mysql-5.7/share/` 的输出 2. `my.cnf` 配置文件内容 3. `df -h` 的磁盘空间状态
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值