【问题标题】:MySQL, Python - Latin-1/UTF8 EncodingMySQL, Python - Latin-1/UTF8 编码
【发布时间】:2013-06-11 17:26:33
【问题描述】:

我已经阅读了将 MySQL 表/DB 从默认的 latin-1 字符集设置为 UTF8_general_ci 的信息,在我的 Python 脚本中将特定的 unicode 字符串插入 MySQL 表时出错。我删除了整个数据库,并重新创建了它:

CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;

然后我在这个模式中创建了我的表,并附加了:

ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

我有一个 Python 脚本通过 MySQLdb 驱动程序输入到表中,我在脚本开头指定了字符集:

connectToDb = mdb.connect(host="localhost",
                          user="me",
                          passwd="me",
                          db="me",
                          charset="utf8",
                          use_unicode=True)

记录送入数据库表而没有编码错误。我的问题是我有一个从这些记录运行的数据库驱动的 Intranet 站点(使用 PHP 脚本创建表条目),当我使用 Chrome 访问网络时,<td> 中的许多记录都显示为包含字形页面。

我在页面的 HTML 中将我的 PHP 连接指定为:

$connect = mysql_connect("localhost",$usrname,$password,"charset='utf8'");

特别是 GB 的“£”符号引起了攻击(当我检查 PHPmyadmin 时,我可以看到它在 GUI 中是一个“£”符号)。

我不知道是什么原因,你能帮忙吗?谢谢。

编辑:HTML 页面还声明了以下内容:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

【问题讨论】:

    标签: php python mysql encoding utf-8


    【解决方案1】:

    1.从 mysql_connect 中删除 "charset='utf8'" - 不正确。

    2.连接后尝试使用mysql_set_charset

    $connect = mysql_connect('localhost', $user, $password);
    mysql_set_charset('utf8', $connect);
    

    PS

    mysql_* 函数已弃用,不要使用它们。考虑切换到 PDO 或 MySQLi。

    【讨论】:

    【解决方案2】:

    来自@guybennet:replacing characters with UTF-8 after using mysql_set_charset('utf8') function

    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");
    and use utf-8 charset in all of your pages.
    

    及用途:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      相关资源
      最近更新 更多