我在 Windows 7 上使用 Wamp server 2.1 和 PHP 5.3.4、Apache 2.2.17、MySql 5.1.53。
httpd.conf:添加默认字符集“iso-8859-1”
php.ini: default_charset = "iso-8859-1"
我正在使用 php mysqli 类在具有 latin1 编码的表和具有 latin1 编码、latin1_swedish_ci 排序规则的列中插入数据。在 php 文件中,我通过元标记将 charset 设置为 ISO-8859-1,我渲染了一个带有 accept-charset="ISO-8859-1" 属性的表单。我使用 mysqli::set_charset 将数据库连接的字符集设置为 latin1,但输入的数据仍然损坏。据我了解,数据是有效的 latin1 字符。
编码:
$dbMain->set_charset('latin1');
$query = "INSERT INTO `table` (" . implode(',', array_keys($data)) . ") VALUES ('" . implode("','", array_values($data)) . "')";
$dbMain->query($query);
数据被破坏:“字符 Ä、Ö、Ü、ä、ö、ü 和 ß。Shop-Produkte für die Elektronik”
当我通过 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)
我的数据库没有cucu了吗?