首页 文章

错误的编码保存在MySql数据库中..Windows 7,Wamp服务器

提问于
浏览
1

我在Windows 7上使用Wamp server 2.1 with PHP 5.3.4,Apache 2.2.17,MySql 5.1.53 .

httpd.conf:AddDefaultCharset“iso-8859-1”

php.ini:default_charset =“iso-8859-1”

我使用php mysqli类在带有latin1编码的表中插入数据,使用latin1编码的列插入latin1_swedish_ci collation . 在php文件中,我通过元标记将charset设置为ISO-8859-1,我使用accept-charset =“ISO-8859-1”属性渲染表单 . 我使用mysqli :: set_charset将数据库连接的charset设置为latin1,但仍然输入的数据已损坏 . 根据我的理解,数据是有效的latin1字符 .

代码:

$dbMain->set_charset('latin1');
$query = "INSERT INTO `table` (" . implode(',', array_keys($data)) . ") VALUES ('" . implode("','", array_values($data)) . "')";
$dbMain->query($query);

数据被破坏:“字符Ä,Ö,Ü,ä,ö,ü和ß . Shop-ProduktefürdieElektronik”

当我通过latin1连接读取数据时,它给了我垃圾(带有问号的黑色钻石)而不是我插入的数据 . 当我通过utf8连接读取数据时,它会显示正确的字符 . 在SqlYog(MySql客户端)中也一样..如果我运行“SET NAMES latin1”并浏览表,我会看到barbage字符 . 如果我运行“SET NAMES utf8”并浏览表格,我会看到正确的文字 . 这有什么不对?

更新:

我在MySql客户端中运行了以下查询:

SET NAMES latin1;
SELECT my_column,HEX(my_column) FROM my_table;

并得到了这个结果

|my_column|HEX(my_column)|
--------------------------
|    ß    |     C39F     |    (entered manually from MySql client)
|   �    |       DF     |    (entered from php via latin1 connection)

我的数据库已经过了吗?

2 回答

  • 0

    一些重要的事情:

    • 您在从数据库中读取/查看数据时使用了哪些编码?

    • 您如何从数据库查看数据?通过mySQL管理员或一些PHP脚本或HTML页面?

    • 然后在浏览器中设置了什么编码?

    • 你用什么编码保存你的php文件?

    您是否考虑过编码转换?我想帮助你,因为我花了一些时间来讨论latin2和utf8编码(波兰语),但我需要你提供更多信息 .

  • 2

    好!根本没有保存值的问题 . 在这两种情况下,都是导致问题的检索 .

    对于MySql客户端,问题是当我使用utf8连接作为客户端的默认连接时,客户端仅显示存储的正确值 . 可能是客户端的UI仅适用于utf8编码 .

    在HTML响应的情况下,PHP文件的编码是ISO-8859-1,但.html模板文件以UTF-8编码保存 . 该网站使用传统的解析器来解析模板,因此当它从UTF-8文件中获取内容并进行解析时,ISO-8859-1数据就会被破坏 . 将.html文件的编码更改为ISO-8859-1解决了这个问题 .

    谢谢大家帮帮我 . 我真的很感激 . 我希望你不要生气

相关问题