我最近将数据库的内容从一个主机移动到另一个主机。之后,我得到一个奇怪的角色,比如两个菱形或带有问号的钻石,而不是瑞典字符ä
。
我在第一个主机之前遇到过这个问题然后我添加了这个代码并且运行正常
$query1 = "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'";
$query2 = "SELECT * FROM arkitekturobjekt2 WHERE filnamn='{$namn}';";
$result = $db->query($query1);
$result = $db->query($query2);
如果我删除$query1
行,我只会得到一个菱形。我该如何解决这个问题?
编辑:
这是我的代码,这里是字符串与循环中DB的内容放在一起。我测试了在utf8_encode(string)
周围使用($row->byggnadstyp)
,但后来我得到了其他奇怪的角色。但最后我测试删除strtolower
然后它是完美的,除了第一个字符不小。但我可以忍受这一点,但是当我使用strtolower
时,我会很高兴知道为什么我会得到这些钻石。我在任何地方使用utf8
,文件设置为utf8而没有BOM。
$buildingInfo .= "<p>Byggnadstyp: " . strtolower ($row->byggnadstyp) . "</p>";
答案 0 :(得分:0)
你可以尝试将它添加到你的mysql配置中:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set = utf8
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake=1
可能不需要最后一行(skip-character-set-client-handshake = 1)。
如果您无法访问配置文件,可以查看此help page。它基本上归结为发送命令
SET NAMES 'UTF8';
在连接开始时。然而,这与你已经做过的相似。