用DBForge和PowerShell导入SQL到MySQL时的字符编码问题

问题描述 投票:0回答:1

我的 MySQL 和/或 DBforge 有问题。

我想使用 DBforge 通过比较 2 个数据库为我生成的 .sql 文件导入模式。

DBforge为我创建的文件包含带重音符号的字符(éèêàâ...),到目前为止没有任何异常,我是法国人,我需要导入的存储过程是用法语编写的。

但是,当我想在 PowerShell 中执行数据库中的这个 .sql 文件时:

Get-Content $SQLfile -Encoding UTF8 | 
     mysql --password=$($target.password) -h $($target.host) -P $($target.port) -u $($target.user) --default-character-set utf8mb4 -f -D $db 2> $tempErrorFile

尽管我的 .sql 文件采用 UTF8 格式并且带有重音符号,但所有特殊字符都被

?
替换。

这是我对 dbforge 的调用,为我生成 .sql 文件(尽管我怀疑这就是问题所在):

&$($DBFORGE_PATH + 'dbforgemysql.com') /schemacompare /source connection:$SOURCE_LINE /target connection:$TARGET_LINE /ExcludeComments:Yes /ExcludeDependencies:Yes /IncludeUseDatabase:Yes /filter:$selectedFilter /sync:$SQL_DBFORGE /log:$LOG_DBFORGE_FILE

这是我使用 dbforge 生成的文件对 mysql 的调用:

&cmd /c "mysql --password=$($target.password) -h $($target.host) -P $($target.port) -u $($target.user) --default-character-set=utf8mb4 -f -D $db < $SQLfile 2> $tempErrorFile"

我尝试了另一种方法:

Get-Content $SQLfile -Encoding UTF8 | 
    mysql --password=$($target.password) -h $($target.host) -P $($target.port) -u $($target.user) --default-character-set=utf8mb4 -f -D $db 2> $tempErrorFile
mysql powershell cmd character-encoding dbforge
1个回答
0
投票

更新,我找到解决方案了!

实际上,PowerShell 才是问题的根源。我仍然不知道为什么,但是这个命令行:

Get-Content $SQLfile -Encoding UTF8 | mysql --password=$($target.password) -h $($target.host) -P $($target.port) -u $($target.user) --default-character-set=utf8mb4 -f -D $db 2> $tempErrorFile

强制特殊字符变成“?”。

您所要做的就是执行第二个命令并在 .sql 文件的路径周围添加“”,即:

&cmd /c "mysql --password=$($target.password) -h $($target.host) -P $($target.port) -u $($target.user) --default-character-set=utf8mb4 -f -D $db < `"$SQLfile`" 2> $tempErrorFile"

如果有人可以向我解释为什么 CMD 在这种情况下有效,但 PowerShell 却不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.