提供一些基本信息:数据库是 Percona Server,该 SQL 文件一共 279 行,使用 xorm 导入时大约会在 113 行出错,报错部分的提示为:
Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS `announcement` ( `id` int(11) NOT NULL AUTO_INCREME' at line 13
这段附近的 SQL 源代码如下:
CREATE TABLE IF NOT EXISTS `announcement` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`date` datetime NOT NULL,
`content` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`markdown` LONGTEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
但是在 SQL 控制台使用这个文件导入一点问题都没有,真是奇怪。
1
lxz6597863 2021-03-19 16:17:16 +08:00
我记得用 Go sql Exec 是不能换行符的,你试下组成一行
|
2
marcosteam OP @lxz6597863 已尝试,把原语句组成一行以后还是报错。
|
3
dongtingyue 2021-03-19 16:30:26 +08:00
上下文也发下
|
4
marcosteam OP @dongtingyue 最近的两个相关上下文如下:
``` CREATE TABLE IF NOT EXISTS `invite_code` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), `code` varchar(128) NOT NULL, KEY `user_id` (`user_id`), `user_id` int(11) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `updated_at` timestamp NOT NULL DEFAULT '2016-06-01 00:00:00' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `announcement` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), `date` datetime NOT NULL, `content` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `markdown` LONGTEXT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `node` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), `name` varchar(128) NOT NULL, `type` int(3) NOT NULL, `online_user` int(11) NOT NULL, `mu_only` INT NULL DEFAULT '0', `online` BOOLEAN NOT NULL DEFAULT TRUE, `server` varchar(128) NOT NULL, `method` varchar(64) NOT NULL, `info` varchar(128) NOT NULL, `status` varchar(128) NOT NULL, `node_group` INT NOT NULL DEFAULT '0', `sort` int(3) NOT NULL, `custom_method` tinyint(1) NOT NULL DEFAULT '0', `traffic_rate` float NOT NULL DEFAULT '1', `node_class` int(11) NOT NULL DEFAULT '0', `node_speedlimit` DECIMAL(12,2) NOT NULL DEFAULT '0.00', `node_connector` int(11) NOT NULL DEFAULT '0', `node_bandwidth` bigint(20) NOT NULL DEFAULT '0', `node_bandwidth_limit` bigint(20) NOT NULL DEFAULT '0', `bandwidthlimit_resetday` int(11) NOT NULL DEFAULT '0', `node_heartbeat` bigint(20) NOT NULL DEFAULT '0', `node_ip` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` |
5
dongtingyue 2021-03-19 17:14:22 +08:00
使用 engine.Import(r io.Reader)或者 engine.ImportFile(fpath string)导入多条.
|
6
marcosteam OP @dongtingyue 将原出问题的 SQL 单独抽出来进行导入,测试通过。使用 engine.Import 导入,测试通过。可能是 engine.ImportFile 不支持长 SQL 文件的原因。已经在 Gitea 上开 issue 。
|