我有一个 PHP Web 应用程序在我的 Ubuntu 服务器上运行 MySQL,它工作正常,没有错误。但是当我
mysqldump
将数据库下载到本地PC(Win10)并执行sql(以使本地数据库与服务器上的数据库完全匹配)时,我总是会收到如下错误:
Data too long for column 'FirstName'
显然,数据在服务器上并不太长,因为插入/更新有效,并且成功地将值存储到 FirstName 列中。服务器和本地之间的架构是相同的。但在我的本地机器上,它认为某些值太长。
我想知道这是否与我的服务器和本地开发盒之间的不同排序规则有关,但我不知道解决此问题的正确方法。
我在服务器和本地主机上运行了这个:
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
结果:
localhost character set: utf8mb4
server character set: utf8mb4
localhost collation: utf8mb4_general_ci
server collation: utf8mb4_general_ci
我将以下内容添加到我的 mysqldump 脚本中:
-default-character-set=utf8mb4
并重新执行转储下载,然后重新运行转储。同样的错误。
我在本地和服务器上运行了这个:
SELECT @@version, @@sql_mode;
结果:
local @@version: 8.3.0
local @@sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
server @@version: 8.0.35-0ubuntu0.22.04.1
server @@sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
接下来我对本地和服务器运行了这个:
SHOW CREATE TABLE Users
结果:
(Both): DEFAULT CHARSET=latin1
本地
SHOW VARIABLES LIKE 'char%'
:
服务器
SHOW VARIABLES LIKE 'char%'
:
有什么想法吗?
您是否尝试过使用 Workbench 导出活动数据库?我发现 Workbench 的导出功能更好。 除此之外,由于“firstname”的长度错误,可能会造成我的错误。例如 firstname varchar(10) 并且您存储名字“FriskyAndFido”(超过 10 个字符)。您能检查一下该属性的长度吗?