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

Kri*_*edK 0 php mysql

我遇到一些字符编码/字符集问题

我从表中检索了一些行,其中一行是varchar.每当varchar列中有æ,ø或å时,它们就会被翻译成一个看似虚伪的角色.3个中的每一个都是相同的虚假char.

我创建了这样的表

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
Run Code Online (Sandbox Code Playgroud)

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

ari*_*nmz 5

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

  1. 文件:

    <head>
        <meta charset="utf-8">
    </head>
    
    Run Code Online (Sandbox Code Playgroud)

    有关更多信息,请参阅官方w3c页面.

  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;
    
    Run Code Online (Sandbox Code Playgroud)

    万一你想知道,看看utf8_unicode_ci和utf8_general_ci之间区别.

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

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