我经常更新服务器上的数据库,并从命令行运行以下行:
mysqldump -u root --password=mypass mydb|mysql -h mysite.cc -u remotusr --password=remotpsw remotdb
问题是它会一路丢失 UTF 字符。
如何将 utf 字符保存在 cmd 中,或者这样做有什么更好的做法?
我经常更新服务器上的数据库,并从命令行运行以下行:
mysqldump -u root --password=mypass mydb|mysql -h mysite.cc -u remotusr --password=remotpsw remotdb
问题是它会一路丢失 UTF 字符。
如何将 utf 字符保存在 cmd 中,或者这样做有什么更好的做法?
(升级到答案)
--default-character-set=charset_name
用作
charset_name
默认字符集。请参阅第 10.5 节,“字符集配置”</a>。如果未指定字符集,则mysqldump
使用utf8
,早期版本使用latin1
.
[ deletia ]
添加到输出。默认情况下启用此选项。要禁止声明,请使用.
SET NAMES default_character_set
SET NAMES
--skip-set-charset
因此,除非您在选项文件中有覆盖这些默认值的设置(您可以指定--no-defaults
以确保它们不是),否则输出mysqldump
应该能够被重定向到另一个mysql
会话而不会丢失 Unicode 字符。
相反,在从新数据库中检索和显示您的数据时,似乎发生了向较小字符集的转换。由于您为此目的使用 PHP 的原始 MySQL API,尽管在其手册章节的介绍中(如下)有警告,您应该使用mysql_set_charset()
来设置连接字符集。
不建议将此扩展用于编写新代码。相反,应该使用mysqli或PDO_MySQL扩展。在选择 MySQL API 时,另请参阅MySQL API 概述以获得更多帮助。