使用mysql-workbench从MSSQL迁移到MySQL,wbcopytables随着“插入数据:不正确的字符串value”的失败而不断失败。
我已经阅读了几乎所有有关此问题的文章,但我仍然无法制作wbcopytables 8.0.29
使用一些特定表。
MySQL-WorkBench生成的脚本看起来像这样:
/usr/bin/wbcopytables \
--odbc-source="DRIVER={FreeTDS};SERVER=172.17.0.2;PORT=1433;DATABASE=;UID=SA;;TDS_VERSION=7.1" \
--source-rdbms-type=Mssql \
--target="[email protected]:3306" \
--source-password="$arg_source_password" \
--target-password="$arg_target_password" \
--force-utf8-for-source \
--source-ssh-password="$arg_source_ssh_password" \
--target-ssh-password="$arg_target_ssh_password" \
--thread-count=$arg_worker_count \
$arg_truncate_target \
$arg_debug_output \
--table '[YourDB]' '[dbo].[EQUIP]' '`dbo`' '`EQUIP`' '-' '-' 'CAST([EQUIP_IDENT] as NVARCHAR(6)) as [EQUIP_IDENT], CAST([NAME] as NVARCHAR(24)) as [NAME], CAST([DESCRIP] as NVARCHAR(35)) as [DESCRIP], CAST([EQP_TYPE] as NVARCHAR(3)) as [EQP_TYPE], CAST([FLEET_IDENT] as NVARCHAR(3)) as [FLEET_IDENT], [CHKLIST_IDENT], [FUEL_NORMAL_HOUR], [FUEL_FILL_HOUR], [FUEL_CRITICAL], [FUEL_CAPACITY], CAST([GPS_FLAG] as NVARCHAR(1)) as [GPS_FLAG], CAST([MDT_FLAG] as NVARCHAR(1)) as [MDT_FLAG], CAST([SMU_FLAG] as NVARCHAR(1)) as [SMU_FLAG], CAST([SERIAL_NUMBER] as NVARCHAR(40)) as [SERIAL_NUMBER], CAST([MODEL_NUMBER] as NVARCHAR(40)) as [MODEL_NUMBER], CAST([MANUFACTURER] as NVARCHAR(15)) as [MANUFACTURER], CAST([BUSINESS_UNIT] as INT) as [BUSINESS_UNIT], CAST([OWNER] as NVARCHAR(20)) as [OWNER], [MANUFACTURER_DATE], [WENCO_ENTRY_DATE], CAST([COST_CODE] as NVARCHAR(5)) as [COST_CODE], CAST([WORKORDER] as NVARCHAR(8)) as [WORKORDER], CAST([ANI] as INT) as [ANI], CAST([IP_ADDRESS] as NVARCHAR(15)) as [IP_ADDRESS], CAST([IP_PORT] as INT) as [IP_PORT], CAST([EQMODEL_CODE] as NVARCHAR(15)) as [EQMODEL_CODE], CAST([HIDE_FROM_FLEET_CONTROL] as NVARCHAR(1)) as [HIDE_FROM_FLEET_CONTROL], CAST([ACTIVE] as NVARCHAR(1)) as [ACTIVE], CAST([TEST] as NVARCHAR(1)) as [TEST], CAST([DEVICE_NAME] as NVARCHAR(32)) as [DEVICE_NAME], CAST([OS_VERSION] as NVARCHAR(12)) as [OS_VERSION], CAST([MDT_VERSION] as NVARCHAR(12)) as [MDT_VERSION], CAST([DMP_ADDRESS] as NVARCHAR(8)) as [DMP_ADDRESS], CAST([CHANNEL] as SMALLINT) as [CHANNEL], CAST([COMMENT] as NVARCHAR(255)) as [COMMENT], CAST([MDT_TEXT] as NVARCHAR(35)) as [MDT_TEXT], CAST([V2X_MAC_ADDRESS] as NVARCHAR(17)) as [V2X_MAC_ADDRESS], [NEXT_INSPECTION_ALERT_SMU_HOURS], [NEXT_INSPECTION_ALERT_TRAVELED_DISTANCE], CAST([AHS_GUID] as NVARCHAR(36)) as [AHS_GUID], [VC_SCOPE_IDENT]'
我刚刚添加了- force-utf8-for-source
flag(默认情况下未出现),否则它会失败,而error失败在Charset转换期间,WSTRING:Success
。
如果我运行此脚本,它会失败,因为列的一行中有一个“ñ” 注释
,
...
12:35:19 [INF][ copytable]: Statement execution failed: Incorrect string value: '\xF1ones' for column `dbo`.`EQUIP`.`COMMENT` at row 85:
[... insert body here ...]
ERROR:`dbo`.`EQUIP`:Inserting Data: Incorrect string value: '\xF1ones' for column `dbo`.`EQUIP`.`COMMENT` at row 85
ERROR:`dbo`.`EQUIP`:Failed copying 113 rows
...
即使我可以
INSERT INTO `dbo`.`EQUIP` (`EQUIP_IDENT`, `NAME`, `DESCRIP`, `EQP_TYPE`, `FLEET_IDENT`, `CHKLIST_IDENT`, `FUEL_NORMAL_HOUR`, `FUEL_FILL_HOUR`, `FUEL_CRITICAL`, `FUEL_CAPACITY`, `GPS_FLAG`, `MDT_FLAG`, `SMU_FLAG`, `SERIAL_NUMBER`, `MODEL_NUMBER`, `MANUFACTURER`, `BUSINESS_UNIT`, `OWNER`, `MANUFACTURER_DATE`, `WENCO_ENTRY_DATE`, `COST_CODE`, `WORKORDER`, `ANI`, `IP_ADDRESS`, `IP_PORT`, `EQMODEL_CODE`, `HIDE_FROM_FLEET_CONTROL`, `ACTIVE`, `TEST`, `DEVICE_NAME`, `OS_VERSION`, `MDT_VERSION`, `DMP_ADDRESS`, `CHANNEL`, `COMMENT`, `MDT_TEXT`, `V2X_MAC_ADDRESS`, `NEXT_INSPECTION_ALERT_SMU_HOURS`, `NEXT_INSPECTION_ALERT_TRAVELED_DISTANCE`, `AHS_GUID`, `VC_SCOPE_IDENT`)
VALUES ('Ñ','Á','á','S','325',3,19.000000,4.000000,2.000000,300.000000,'N','M','N',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,201,NULL,NULL,NULL,'N','N','N',NULL,NULL,NULL,NULL,1,NULL,'PALA-C01',NULL,NULL,NULL,NULL,NULL);
Query OK, 1 row affected (0.007 sec)
添加
从sql Server 2019-15.0 它们。 4198.2
1> SELECT *
2> FROM INFORMATION_SCHEMA.COLUMNS
3> WHERE TABLE_NAME = 'EQUIP' AND COLUMN_NAME = 'COMMENT'
4> GO
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_PRECISION_RADIX NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_CATALOG CHARACTER_SET_SCHEMA CHARACTER_SET_NAME COLLATION_CATALOG COLLATION_SCHEMA COLLATION_NAME DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME
-------------- ------------- ----------- ------------ ---------------- --------------- ----------- ---------- ------------------------ ---------------------- ----------------- ----------------------- ------------- ------------------ ---------------------- --------------------- ------------------- ------------------ ----------------- ----------------------------- --------------- -------------- ------------
YourDB dbo EQUIP COMMENT 35 NULL YES nvarchar 255 510 NULL NULL NULL NULL NULL NULL UNICODE NULL NULL SQL_Latin1_General_CP1_CI_AS NULL NULL NULL
Mariadb 10.7.3
SHOW FULL COLUMNS FROM EQUIP WHERE Field = 'COMMENT';
+---------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+---------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| COMMENT | varchar(255) | utf8mb4_unicode_ci | YES | | NULL | | select,insert,update,references | |
+---------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
也将所有内容设置为utf8mb4
和utf8MB4_UNICODE_CI
in Mariadb:
SHOW VARIABLES LIKE 'CHAR%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
SHOW VARIABLES LIKE 'COLLATION%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
据我了解,据我了解>
>
> UT8MB4
尚未以farem_set_system
的支持,这就是为什么它显示utf8mb3
(可能是这个
问题
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = "dbo";
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+----------------------------+------------------------+
?代码>设备
SELECT CCSA.CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.TABLES T, NFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY CCSA
WHERE CCSA.COLLATION_NAME = T.TABLE_COLLATION AND T.TABLE_SCHEMA = "dbo" AND T.TABLE_NAME = "EQUIP";
+--------------------+--------------------+
| CHARACTER_SET_NAME | COLLATION_NAME |
+--------------------+--------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+--------------------+--------------------+
列注释
SELECT CHARACTER_SET_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = "dbo" AND TABLE_NAME = "EQUIP" AND COLUMN_NAME = "COMMENT";
+--------------------+--------------------+
| CHARACTER_SET_NAME | COLLATION_NAME |
+--------------------+--------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+--------------------+--------------------+
我也尝试cast
注释
字段 at varchar(255)
代码>和nvarchar(255)
,也根本不施放它,但没有任何作用。
有人知道什么可能失败吗?它是wbcopytables
配置问题,还是在MSSQL/Mariadb中?
I've read almost every post about this issue but I still can't make wbcopytables 8.0.29
work with some specific tables.
The script generated by MySQL-Workbench looks like this :
/usr/bin/wbcopytables \
--odbc-source="DRIVER={FreeTDS};SERVER=172.17.0.2;PORT=1433;DATABASE=;UID=SA;;TDS_VERSION=7.1" \
--source-rdbms-type=Mssql \
--target="[email protected]:3306" \
--source-password="$arg_source_password" \
--target-password="$arg_target_password" \
--force-utf8-for-source \
--source-ssh-password="$arg_source_ssh_password" \
--target-ssh-password="$arg_target_ssh_password" \
--thread-count=$arg_worker_count \
$arg_truncate_target \
$arg_debug_output \
--table '[YourDB]' '[dbo].[EQUIP]' '`dbo`' '`EQUIP`' '-' '-' 'CAST([EQUIP_IDENT] as NVARCHAR(6)) as [EQUIP_IDENT], CAST([NAME] as NVARCHAR(24)) as [NAME], CAST([DESCRIP] as NVARCHAR(35)) as [DESCRIP], CAST([EQP_TYPE] as NVARCHAR(3)) as [EQP_TYPE], CAST([FLEET_IDENT] as NVARCHAR(3)) as [FLEET_IDENT], [CHKLIST_IDENT], [FUEL_NORMAL_HOUR], [FUEL_FILL_HOUR], [FUEL_CRITICAL], [FUEL_CAPACITY], CAST([GPS_FLAG] as NVARCHAR(1)) as [GPS_FLAG], CAST([MDT_FLAG] as NVARCHAR(1)) as [MDT_FLAG], CAST([SMU_FLAG] as NVARCHAR(1)) as [SMU_FLAG], CAST([SERIAL_NUMBER] as NVARCHAR(40)) as [SERIAL_NUMBER], CAST([MODEL_NUMBER] as NVARCHAR(40)) as [MODEL_NUMBER], CAST([MANUFACTURER] as NVARCHAR(15)) as [MANUFACTURER], CAST([BUSINESS_UNIT] as INT) as [BUSINESS_UNIT], CAST([OWNER] as NVARCHAR(20)) as [OWNER], [MANUFACTURER_DATE], [WENCO_ENTRY_DATE], CAST([COST_CODE] as NVARCHAR(5)) as [COST_CODE], CAST([WORKORDER] as NVARCHAR(8)) as [WORKORDER], CAST([ANI] as INT) as [ANI], CAST([IP_ADDRESS] as NVARCHAR(15)) as [IP_ADDRESS], CAST([IP_PORT] as INT) as [IP_PORT], CAST([EQMODEL_CODE] as NVARCHAR(15)) as [EQMODEL_CODE], CAST([HIDE_FROM_FLEET_CONTROL] as NVARCHAR(1)) as [HIDE_FROM_FLEET_CONTROL], CAST([ACTIVE] as NVARCHAR(1)) as [ACTIVE], CAST([TEST] as NVARCHAR(1)) as [TEST], CAST([DEVICE_NAME] as NVARCHAR(32)) as [DEVICE_NAME], CAST([OS_VERSION] as NVARCHAR(12)) as [OS_VERSION], CAST([MDT_VERSION] as NVARCHAR(12)) as [MDT_VERSION], CAST([DMP_ADDRESS] as NVARCHAR(8)) as [DMP_ADDRESS], CAST([CHANNEL] as SMALLINT) as [CHANNEL], CAST([COMMENT] as NVARCHAR(255)) as [COMMENT], CAST([MDT_TEXT] as NVARCHAR(35)) as [MDT_TEXT], CAST([V2X_MAC_ADDRESS] as NVARCHAR(17)) as [V2X_MAC_ADDRESS], [NEXT_INSPECTION_ALERT_SMU_HOURS], [NEXT_INSPECTION_ALERT_TRAVELED_DISTANCE], CAST([AHS_GUID] as NVARCHAR(36)) as [AHS_GUID], [VC_SCOPE_IDENT]'
I just added the --force-utf8-for-source
flag (which didn't came by default), otherwise it failed with Error during charset conversion of wstring: Success
.
If I run this script it fails because there's a "ñ" in one of the rows of the column COMMENT
...
12:35:19 [INF][ copytable]: Statement execution failed: Incorrect string value: '\xF1ones' for column `dbo`.`EQUIP`.`COMMENT` at row 85:
[... insert body here ...]
ERROR:`dbo`.`EQUIP`:Inserting Data: Incorrect string value: '\xF1ones' for column `dbo`.`EQUIP`.`COMMENT` at row 85
ERROR:`dbo`.`EQUIP`:Failed copying 113 rows
...
Even though it works if I add them manually
INSERT INTO `dbo`.`EQUIP` (`EQUIP_IDENT`, `NAME`, `DESCRIP`, `EQP_TYPE`, `FLEET_IDENT`, `CHKLIST_IDENT`, `FUEL_NORMAL_HOUR`, `FUEL_FILL_HOUR`, `FUEL_CRITICAL`, `FUEL_CAPACITY`, `GPS_FLAG`, `MDT_FLAG`, `SMU_FLAG`, `SERIAL_NUMBER`, `MODEL_NUMBER`, `MANUFACTURER`, `BUSINESS_UNIT`, `OWNER`, `MANUFACTURER_DATE`, `WENCO_ENTRY_DATE`, `COST_CODE`, `WORKORDER`, `ANI`, `IP_ADDRESS`, `IP_PORT`, `EQMODEL_CODE`, `HIDE_FROM_FLEET_CONTROL`, `ACTIVE`, `TEST`, `DEVICE_NAME`, `OS_VERSION`, `MDT_VERSION`, `DMP_ADDRESS`, `CHANNEL`, `COMMENT`, `MDT_TEXT`, `V2X_MAC_ADDRESS`, `NEXT_INSPECTION_ALERT_SMU_HOURS`, `NEXT_INSPECTION_ALERT_TRAVELED_DISTANCE`, `AHS_GUID`, `VC_SCOPE_IDENT`)
VALUES ('Ñ','Á','á','S','325',3,19.000000,4.000000,2.000000,300.000000,'N','M','N',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,201,NULL,NULL,NULL,'N','N','N',NULL,NULL,NULL,NULL,1,NULL,'PALA-C01',NULL,NULL,NULL,NULL,NULL);
Query OK, 1 row affected (0.007 sec)
Migration context
From SQL Server 2019 - 15.0.4198.2
1> SELECT *
2> FROM INFORMATION_SCHEMA.COLUMNS
3> WHERE TABLE_NAME = 'EQUIP' AND COLUMN_NAME = 'COMMENT'
4> GO
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_PRECISION_RADIX NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_CATALOG CHARACTER_SET_SCHEMA CHARACTER_SET_NAME COLLATION_CATALOG COLLATION_SCHEMA COLLATION_NAME DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME
-------------- ------------- ----------- ------------ ---------------- --------------- ----------- ---------- ------------------------ ---------------------- ----------------- ----------------------- ------------- ------------------ ---------------------- --------------------- ------------------- ------------------ ----------------- ----------------------------- --------------- -------------- ------------
YourDB dbo EQUIP COMMENT 35 NULL YES nvarchar 255 510 NULL NULL NULL NULL NULL NULL UNICODE NULL NULL SQL_Latin1_General_CP1_CI_AS NULL NULL NULL
To MariaDB 10.7.3
SHOW FULL COLUMNS FROM EQUIP WHERE Field = 'COMMENT';
+---------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+---------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| COMMENT | varchar(255) | utf8mb4_unicode_ci | YES | | NULL | | select,insert,update,references | |
+---------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
Also everything is set to utf8mb4
and utf8mb4_unicode_ci
in MariaDB :
SHOW VARIABLES LIKE 'CHAR%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
SHOW VARIABLES LIKE 'COLLATION%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
As far as I understand ut8mb4
is not yet supported as character_set_system
, that's why it shows utf8mb3
(might be this the problem?)
Database dbo
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = "dbo";
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+----------------------------+------------------------+
Table EQUIP
SELECT CCSA.CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.TABLES T, NFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY CCSA
WHERE CCSA.COLLATION_NAME = T.TABLE_COLLATION AND T.TABLE_SCHEMA = "dbo" AND T.TABLE_NAME = "EQUIP";
+--------------------+--------------------+
| CHARACTER_SET_NAME | COLLATION_NAME |
+--------------------+--------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+--------------------+--------------------+
Column COMMENT
SELECT CHARACTER_SET_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = "dbo" AND TABLE_NAME = "EQUIP" AND COLUMN_NAME = "COMMENT";
+--------------------+--------------------+
| CHARACTER_SET_NAME | COLLATION_NAME |
+--------------------+--------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+--------------------+--------------------+
I've also tried to CAST
the COMMENT
field as VARCHAR(255)
and NVARCHAR(255)
, also not casting it at all, but nothing works.
Does anyone have a clue what might be failing? It it a wbcopytables
configuration issue or is it in MSSQL/MariaDB?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论