我的 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
更新,我找到解决方案了!
实际上,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 却不起作用。