【问题标题】:MYSQL latin1 and utf8 after mysqldumpmysqldump 之后的 MYSQL latin1 和 utf8
【发布时间】:2013-06-22 14:30:08
【问题描述】:

我做了这样的备份:

服务器 A: mysqldump --all-databases -u user -ppwd --default-character-set=latin1 > backup.sql

服务器 B: mysql -u 用户 -ppwd --default-character-set=latin1

但是现在,当我使用 PHP 显示来自 MYSQL 的数据时,我有类似的东西: “将军”。

我的 html 页面是 latin1。我的数据库是 latin1。

如果我把 utf8_decode($mydata);我得到了正确的结果。 如何配置 MYSQL 以使数据库结果为 latin1 ?

来自服务器 B:

mysql> SHOW VARIABLES WHERE variable_name like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

【问题讨论】:

    标签: mysql utf-8


    【解决方案1】:

    当您在备份时遇到字符集问题时,您应该尝试以正确的方式执行备份和恢复命令,而不使用 shell 的 <> 重定向器,因为该重定向会破坏数据库文本。

    备份

    mysqldump -u root -p --opt --all-databases -r backup.sql
    

    恢复

    mysql -uuser -p --default-character-set=utf8 database
    mysql> SET names 'utf8';
    mysql> SOURCE backup.sql;
    

    【讨论】:

    • 它起作用了,但我还在 backup.sql 文件中对s/latin1/utf8/ 进行了搜索替换,我还在转储mysqldump --default-character-set=latin1 --set-charset 上添加了两个参数
    【解决方案2】:

    您的数据库包含一些使用 utf-8 编码的数据,但您已将其存储在声明为 latin1 的表列中。大概您希望 Général 显示为 Général。

    你将不得不修复你的数据来解决这个问题。要查找违规数据,请参阅这篇文章。

    How can I find non-ASCII characters in MySQL?

    【讨论】:

    • 其实我在使用PHPMyAdmin的时候,可以在表格中看到正确的数据。在表中它是“Général”,但是当我用我的 PHP 脚本显示数据时,我得到“Général”。如果在 PHP 脚本中输入“utf8_decode()”,则数据显示为“Général”。所以我认为我的数据不必修复。
    • 我敢打赌,您无法搜索“Général”并找到该记录。 PhpMyAdmin 使用网络浏览器来显示您的数据。浏览器将您的数据从编码的 latin1(例如 Général)转换为 utf-8,因此它将正确显示您编码错误的数据。 php 中的 utf8_decode() 调用做同样的事情。试试 strlen()。我打赌你会发现长度是 6,而不是 8。
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2010-11-29
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多