You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Windows正常的MySQL查询在Linux服务器报错求助

问题分析与解决方案

核心原因:MySQL 8.0与MariaDB的关键字解析/换行符差异

你的查询在本地MariaDB正常运行,但部署到MySQL 8.0时报错,主要有两个可能的根源:

1. rank是MySQL 8.0的保留关键字

MySQL 8.0将rank列为保留关键字(用于窗口函数RANK()),而MariaDB 10.4在默认配置下允许直接将rank作为字段名使用,无需转义。当MySQL 8.0解析0 - rank + 1时,会将rank识别为关键字而非字段名,进而触发语法错误。

2. 换行符格式不兼容

本地开发环境使用Windows的CRLF换行符,部署到Linux服务器后,查询中的CRLF未被正确转换为LF,导致MySQL解析查询时出现字符异常,报错位置恰好落在+ 1附近。


无需修改查询语句的解决方案

针对关键字冲突的解决方法

修改MySQL 8.0的sql_mode配置,关闭严格的关键字检查:

  1. 登录MySQL服务器,执行以下命令临时生效:
SET GLOBAL sql_mode = 'ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  1. 若要永久生效,编辑MySQL配置文件(通常是/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),添加/修改:
[mysqld]
sql_mode = ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  1. 重启MySQL服务:
sudo systemctl restart mysql

针对换行符问题的解决方法

确保TypeScript编译时将代码中的换行符转换为Linux兼容的LF:

  1. 在tsconfig.json中添加配置:
{
  "compilerOptions": {
    "newLine": "lf"
  }
}
  1. 重新编译并部署代码即可。

内容的提问来源于stack exchange,提问作者Muhammad Nihad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:12:10