mysql,php-字符编码问题`

| 我正在使用zend框架进行项目,并且正在从utf-8数据库中提取数据。该项目也是utf-8。 在表单中,我有一个select元素,用于显示国家/地区列表。问题是: 在法语或西班牙语中,未显示某些国家。 在完成我的国家列表的var_dump()之后,我看到那些是具有特殊字符的国家。有口音的。 在var_dump中,我可以看到以?表示的字符。在钻石中。我尝试将编码更改为iso-8859-1,我可以看到带有特殊字符的var_dump结果很好。 来自utf-8数据库的数据如何在iso-8859-1中显示! 我可以在MySQL的utf-8表中存储iso-8859-1字符集吗?它不应该显示混乱的字符吗? 困惑。 -
delimiter $$

CREATE TABLE `geo_Country` (
  `CountryID` int(10) NOT NULL,
  `CountryName` varchar(45) NOT NULL,
  `CountryCompleteName` varchar(45) NOT NULL,
  `Nationality` varchar(45) NOT NULL,
  `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Status` tinyint(1) NOT NULL DEFAULT \'1\',
  `LanguageCode` char(2) NOT NULL,
  `ZoneID` int(10) NOT NULL,
  PRIMARY KEY (`CountryID`,`LanguageCode`),
  KEY `fk_geo_Country_web_Language1` (`LanguageCode`),
  KEY `fk_geo_Country_geo_Zone` (`ZoneID`),
  KEY `idx_CountryName` (`CountryName`)
  CONSTRAINT `fk_geo_Country_geo_Zone` FOREIGN KEY (`ZoneID`) REFERENCES `geo_Zone` (`ZoneID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_geo_Country_web_Language1` FOREIGN KEY (`LanguageCode`) REFERENCES `web_Language` (`LanguageCode`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
    
已邀请:
连接数据库时,应设置cleint编码。 对于Zend_Db,似乎应该是这样的(注意\'driver_options \'):
$params = array(
    \'host\' => \'localhost\',
    \'username\' => \'username\',
    \'password\' => \'password\',
    \'dbname\' => \'dbname\',
    \'driver_options\' => array(PDO::MYSQL_ATTR_INIT_COMMAND => \'SET NAMES UTF8;\');
);
对于application.ini
resources.db.params.charset = utf8
作为最后的选择,您可以像其他查询一样,手动运行此查询
SET NAMES UTF8
。     
使用UTF-8时要记住的是: 您整个应用程序中的所有内容都必须为UTF-8! 对于普通的PHP / MySQL Web应用程序(一种表单,发布到数据库),您需要检查是否: 您的数据库连接使用UTF-8(建立连接后立即执行此查询:“ 4”) 您的PHP代码使用UTF-8。这意味着无需使用字符集转换/编码功能(当一切都为UTF-8时无需使用)。 您的HTML输出为UTF-8,方法是发送
Content-Type: text/html; charset=utf8
标头,使用
<meta charset=\"utf8\">
标记(对于HTML5,对于其他HTML变体,请使用
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8\">
) 在您使用“ 8”的情况下,只有一些纯文本发送到浏览器,而没有提及任何字符集。查看规则3,这意味着您的浏览器以不同的字符集(可能是latin1)显示此字符,从而为您提供菱形/问号/块。 如果需要检查数据是否存储正确,请使用数据库客户端(如PHPMyAdmin)查看记录。这样,您将以UTF-8格式查看内容(注意:这是PMA中的设置,因此请检查它是否未设置为其他字符集!)。 附带说明一下,将数据库的文本列的排序规则设置为utf8_general_ci,这不是用于存储,而是用于排序。因此,这与您的问题无关,但是这样做是一个好习惯。     

要回复问题请先登录注册