我刚刚做了一个简单的老式mysql转储,如下所示
mysqldump -h "192.168.0.6" -uroot -p db_name > my_sexy_dump_file.sql. 转储数据库产生了一个文件,其中我所有的utf-8字符串都被转换为latin1。至少在我看来,这已经完成了,因为现在我以前的每个字母都有两个字母。结果如下所示:
╘┐╒-╒╢╒┐╓?╒╕╒╢╒í╒»╒í╒╢╒ú╓??╒í╒╜╒?╒╢╒╡╒í╒»
╘╗╒╢╒-╒»╒╕╒ó╒í╒╢╒»╒╕╓é╒┤
原文是亚美尼亚文。
我该如何解决这个问题呢?执行转储文件会产生错误。将insert查询复制并粘贴到mysql客户端应用程序(如sqlyog )中只是将损坏的字符串写入到表中。
发布于 2011-06-02 21:45:53
我通过创建整个字母表的地图并逐个替换所有损坏的字符来修复这个问题。关于我在这里所做的更多详细信息:http://fictionalrealm.com/coding/2011/05/29/mysqldump-corrupted-utf8-data-when-dumping-on-windows-machine/
发布于 2011-05-27 18:06:23
我是这样做的,以避免丢失字符集信息:
-r标志,这样您就不必通过管道传输输出。请确保使用--set-charset标志(或--opt),以便转储文件包含使用SOURCE filename命令的--optcommand.下面是我的完整转储脚本(用于Bash,因为我不运行Windows,但您可能可以从中获得一些好东西):
#!/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"下面是一个匹配的导入脚本:
#!/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"https://stackoverflow.com/questions/6150630
复制相似问题