首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在windows7powershell下的mysqldump将我所有的utf-8字符串转换为latin1或类似的东西

问在windows7powershell下的mysqldump将我所有的utf-8字符串转换为latin1或类似的东西
EN

Stack Overflow用户
提问于 2011-05-27 17:58:36
回答 2查看 1K关注 0票数 1

我刚刚做了一个简单的老式mysql转储,如下所示

代码语言:javascript
复制
mysqldump -h "192.168.0.6" -uroot -p db_name > my_sexy_dump_file.sql. 

转储数据库产生了一个文件,其中我所有的utf-8字符串都被转换为latin1。至少在我看来,这已经完成了,因为现在我以前的每个字母都有两个字母。结果如下所示:

╘┐╒-╒╢╒┐╓?╒╕╒╢╒í╒»╒í╒╢╒ú╓??╒í╒╜╒?╒╢╒╡╒í╒»

╘╗╒╢╒-╒»╒╕╒ó╒í╒╢╒»╒╕╓é╒┤

原文是亚美尼亚文。

我该如何解决这个问题呢?执行转储文件会产生错误。将insert查询复制并粘贴到mysql客户端应用程序(如sqlyog )中只是将损坏的字符串写入到表中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-02 21:45:53

我通过创建整个字母表的地图并逐个替换所有损坏的字符来修复这个问题。关于我在这里所做的更多详细信息:http://fictionalrealm.com/coding/2011/05/29/mysqldump-corrupted-utf8-data-when-dumping-on-windows-machine/

票数 0
EN

Stack Overflow用户

发布于 2011-05-27 18:06:23

我是这样做的,以避免丢失字符集信息:

  1. 考虑对command.
  2. Import使用-r标志,这样您就不必通过管道传输输出。请确保使用--set-charset标志(或--opt),以便转储文件包含使用SOURCE filename命令的--optcommand.
  3. Import。

下面是我的完整转储脚本(用于Bash,因为我不运行Windows,但您可能可以从中获得一些好东西):

代码语言:javascript
复制
#!/bin/bash                                                                             
# Version 2.6                                                                           
# Dump a database to file, to be used in migration or as a backup                       
# Emil Vikstrom 2009-2010                                                    

DB="$1";
FILENAME="$DB.$(date -I)"
TMP="$FILENAME.sql"
I=1
while [ -e "$TMP" ] || [ -e "$TMP.gz" ]; do
        let I=$I+1
        TMP="$FILENAME.$I.sql"
done
FILENAME="$TMP"

echo "[$(date +%R)] Dumping..."
mysqldump --single-transaction --hex-blob --add-drop-table --opt -e --quick --quote-names -r "$FILENAME" "$DB"
echo "[$(date +%R)] Compressing..."
gzip "$FILENAME"
echo "[$(date +%R)] Done: $FILENAME.gz"

下面是一个匹配的导入脚本:

代码语言:javascript
复制
#!/bin/bash                                                                             
# Import a database SQL file                                                            
# Emil Vikstrom 2008                                                         
# Version 2.1                                                                           

DUMPFILE="$1"
DATABASE="$2"

if [[ $DUMPFILE =~ "(.*)\.gz"  ]]; then
        if [ -e $DUMPFILE ]; then
                echo "[$(date +%R)] Unzipping..."
                gunzip "$DUMPFILE"
        fi
        DUMPFILE="${BASH_REMATCH[1]}"
fi

echo "[$(date +%R)] Importing $DUMPFILE..."
echo "SOURCE $DUMPFILE;" | mysql "$DATABASE"
echo "[$(date +%R)] Done"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6150630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档