php从mysql获取▒而不是æøå

时间:2014-06-20 07:11:52

标签: php mysql

我遇到了一些字符编码/字符集

我从表中检索了一些行,其中一行是varchar。每当varchar列中有æ,ø或å时,它们就会被转换为看似虚伪的字符。 3中的每一个都有相同的虚假信息。

我像这样创建了表

CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`mytext` int(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1402 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

我猜它与collat​​e或charset有关,但是找不到任何可以解决这个问题的东西。

2 个答案:

答案 0 :(得分:5)

你必须在(至少)3个地方设置字符集:

  1. 文件:

    <head>
        <meta charset="utf-8">
    </head>
    

    有关详细信息,请参阅official w3c pages

  2. 数据库:

    ALTER DATABASE `my_database` CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE `my_table` CONVERT TO CHARACTER SET utf8;
    ALTER TABLE `my_table` MODIFY `my_column` … CHARACTER SET utf8 COLLATE utf8_general_ci;
    

    如果您想知道,请参阅difference between utf8_unicode_ci and utf8_general_ci

  3. 使用PHP的PDO扩展与DSN中的字符集进行连接:

    $DBH = new PDO(
        'mysql:host=http://example.com;dbname=mydb;charset=utf8', 
        'username', 
        'password');
    

答案 1 :(得分:0)

从数据库中检索记录时,将其设置为UTF8,它将解决您的问题。使用以下代码希望它能帮助您

$con=mysqli_connect("localhost","username","password","db_name");
$con->set_charset("utf8"); 
$result = mysqli_query($con,"SELECT * FROM mytable");