繁体   English   中英

使用正确的字符集/排序规则转储和加载 MySQL

[英]Dump and load of MySQL with correct charset/collation

我有一个 Bamboo 构建脚本,它向 MySQL Admin 执行以下操作:

    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysqladmin" -f -h server -u user -p pwd drop db1
    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysqladmin" -f -h server -u user -p pwd create db1
    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysqldump" db2 -h server -r c:\temp\db2.sql -n --no-data -u user -p pwd
    "C:\Program Files\MySQL\MySQL Utilities 1.6\mysql" -h server -D db1 -u user -p pw < c:\temp\db2.sql

该代码基本上删除了数据库,重新创建它并从默认数据库(db2)加载

问题是 db2 是以下字符集/排序规则

字符集:latin1,排序规则:latin1_bin

而复制的数据库是;

字符集:utf8mb4,排序规则:utf8mb4_0900_...

当我们的 MySQL 批量加载程序运行并遇到数据中的某些字符时,这会产生问题,例如:

    MySql.Data.MySqlClient.MySqlException: Invalid utf8mb4 character string: 'TO CHARGE VOLAC '

我在这个网站和谷歌上花了一些时间,但我尝试过的都没有奏效。

有人可以指出我正确的方向吗?

为了回答这个问题,我将“默认数据库”解释为您要从中复制的数据库,并将“复制的数据库”解释为您尝试复制到的新数据库。

如果使用 SQL 命令而不是 mysqladmin 创建新数据库,则可以设置新数据库的字符集:

CREATE DATABASE db1 CHARACTER SET latin1 COLLATE latin1_bin;

从命令行执行:

echo 'CREATE DATABASE db1 CHARACTER SET latin1 COLLATE latin1_bin;' | mysql -h server -u user -ppw

(此外,在您的示例中,-p 后面有一个空格不会正确解释密码,您需要将其附加到 -p)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM