【问题标题】:mysql command line - large sql file - incorrect string valuemysql 命令行 - 大型 sql 文件 - 不正确的字符串值
【发布时间】:2021-02-21 22:56:20
【问题描述】:

我有一个 350 Mb 的 mysql sql 文件,我试图在本地运行一个我已确认访问的远程 MySQL 实例。我的命令是这样的:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -h camp****.com -u cam****aigns --password=Camp****** cam****igns < "E:\mypath\Camp****19-2020.sql"

它主要工作,但每 5000-10000 行左右,我遇到如下错误:

ERROR 1366 (HY000) at line 9320: Incorrect string value: '\xC3\xBD350 ...' for column 'Address1' at row 1

第 9320 行(可以看到特殊字符):

INSERT INTO `Contacts` VALUES (33413,390,'Jim','Hancock','ý350 E 100 N','','Hampton','UT','84050','2012-06-25 15:11:49');

我看过很多关于更改 ini/cnf 设置等的堆栈帖子。但是,让这个 1 cmd-line 脚本执行工作的最简单、最直接的方法是什么?是否有我可以传入的命令行参数,可能指定 UTF-8 或其他什么?

【问题讨论】:

  • 关注,转到您正在插入的文件,转到第 9320 行并查看正在插入的内容,具体反映了 address1 列。任何特殊字符,字符串中的引号?你的插入语句是什么。请编辑您的帖子并将插入语句放在那里。不要发表评论。\
  • 还将show create table yourtablename 的输出添加到您的问题(针对出现错误的表)
  • 您当然不需要更改整体服务器设置来运行脚本。 command-line client 有一个 --default-character-set 选项。

标签: mysql


【解决方案1】:

尝试以下方法:

  • 使用“;CharSet=utf8mb4;”在连接字符串中。我之前错过了这个。我使用的是“utf8”。

  • 将数据库的默认字符集、表的默认字符集和所有列的字符集设置为'utf8mb4'

  • 将数据库的默认排序规则、表的默认排序规则和所有列的排序规则设置为'utf8mb4_unicode_ci'

阅读更多here

【讨论】:

  • 怎么样??这些可以添加到我的命令行参数中吗?能举个例子吗?
【解决方案2】:

将此添加到我的 sql 脚本顶部解决了它:

SET NAMES 'utf8';
SET CHARACTER SET utf8;

【讨论】:

  • 请注意,以这种方式设置编码意味着客户端已经读取了文件并建立了连接。如果默认值与您所需的设置不兼容,它可能会起作用,但它可能不如在客户端级别设置值那么健壮。
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多