我在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)
我的数据库已经过了吗?