我试图显示这样的文字:
1ºA
存储在MySQL表('level')中。
使用此代码查询表'level'后:
/**
* @Route("/list-level", name="list_level")
*/
public function listAction(Request $request)
{
$em = $this->getDoctrine()->getEntityManager();
$levels = $em->getRepository('AppBundle:Level')->findAll();
var_dump($levels[0]->getName());
die("fasf");
var_dump()
会返回此信息:
我正在使用Symfony,因此与数据库连接相关的信息缓存在文件var/cache/prod/appProdProjectContainer
中。所以我打开它来检查charset
参数的值,我发现了这个:
protected function getDoctrine_Dbal_DefaultConnectionService()
{
$a = new \Symfony\Bridge\Doctrine\ContainerAwareEventManager($this);
$a->addEventListener(array(0 => 'loadClassMetadata'), ${($_ = isset($this->services['doctrine.orm.default_listeners.attach_entity_listeners']) ? $this->services['doctrine.orm.default_listeners.attach_entity_listeners'] : $this->get('doctrine.orm.default_listeners.attach_entity_listeners')) && false ?: '_'});
return $this->services['doctrine.dbal.default_connection'] = ${($_ = isset($this->services['doctrine.dbal.connection_factory']) ? $this->services['doctrine.dbal.connection_factory'] : $this->get('doctrine.dbal.connection_factory')) && false ?: '_'}->createConnection(array('driver' => 'pdo_mysql', 'host' => 'localhost', 'port' => NULL, 'dbname' => 'my_javiergarpe1979', 'user' => 'javiergarpe1979', 'password' => '*******', 'charset' => 'UTF8', 'driverOptions' => array(), 'defaultTableOptions' => array()), new \Doctrine\DBAL\Configuration(), $a, array());
}
正如您在该功能上看到的那样,写有:'charset' => 'UTF8'
,所以.. 为什么我没有得到正确的字符?
答案 0 :(得分:3)
您可能需要更新driverOptions
中的var/cache/prod/appProdProjectContainer
:
protected function getDoctrine_Dbal_DefaultConnectionService()
{
$a = new \Symfony\Bridge\Doctrine\ContainerAwareEventManager($this);
$a->addEventListener(array(0 => 'loadClassMetadata'), ${($_ = isset($this->services['doctrine.orm.default_listeners.attach_entity_listeners']) ? $this->services['doctrine.orm.default_listeners.attach_entity_listeners'] : $this->get('doctrine.orm.default_listeners.attach_entity_listeners')) && false ?: '_'});
return $this->services['doctrine.dbal.default_connection'] = ${($_ = isset($this->services['doctrine.dbal.connection_factory']) ? $this->services['doctrine.dbal.connection_factory'] : $this->get('doctrine.dbal.connection_factory')) && false ?: '_'}->createConnection(array('driver' => 'pdo_mysql', 'host' => 'localhost', 'port' => NULL, 'dbname' => 'my_javiergarpe1979', 'user' => 'javiergarpe1979', 'password' => '*******', 'charset' => 'UTF8', 'driverOptions' => array('1002'=> "SET NAMES 'UTF8' COLLATE 'utf8_general_ci'"), 'defaultTableOptions' => array()), new \Doctrine\DBAL\Configuration(), $a, array());
}
设置'driverOptions' => array('1002'=> "SET NAMES 'UTF8' COLLATE 'utf8_general_ci'")
而不是'driverOptions' => array()
。
答案 1 :(得分:2)
可能标题中没有<meta charset=UTF-8>
是一个浏览器问题。
º
是“MASCULINE ORDINAL INDICATOR”。
如果您从表中SELECT HEX(...)
,您应该会看到C2BA
该字符。或31C2BA41
1ºA
。如果是,则将其正确存储为utf8
(或utf8mb4
)。
案例1(原始字节不是UTF-8):
SET NAMES
和INSERT
的连接(或SELECT
)不是utf8 / utf8mb4。解决这个问题。CHARACTER SET
utf8(或utf8mb4)。案例2(原始字节为UTF-8):
SET NAMES
的连接(或SELECT
)不是utf8 / utf8mb4。解决这个问题。CHARACTER SET utf8
(或utf8mb4)。如果您有其他问题,请提供SHOW CREATE TABLE
。
答案 2 :(得分:1)
有多点可能会出错。
<meta charset="UTF-8">
标记中的<head>
。<?>
字符,但在这种情况下可能会显示与°
类似的内容。答案 3 :(得分:1)
检查数据库中表的字符集。可能不是UTF-8。