[英]mysql, php - character encoding problem`
我正在使用zend框架進行項目,並且正在從utf-8數據庫中提取數據。 該項目也是utf-8。
在表單中,我有一個select元素,用於顯示國家/地區列表。 問題是:在法語或西班牙語中,沒有顯示某些國家。
在完成我的國家列表的var_dump()之后,我看到那些是具有特殊字符的國家。 有口音的。
在var_dump中,我可以看到以?表示的字符。 在鑽石中。 我嘗試將編碼更改為iso-8859-1,我可以看到帶有特殊字符的var_dump結果很好。
來自utf-8數據庫的數據如何在iso-8859-1中顯示!
我可以將iso-8859-1字符集存儲在mysql的utf-8表中嗎? 它不應該顯示混亂的字符嗎?
困惑。
-
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$$
使用UTF-8時要記住的是:
您整個應用程序中的所有內容都必須為UTF-8!
對於普通的PHP / MySQL Web應用程序(表單,發布到數據庫),您需要檢查:
SET NAMES UTF8;
) Content-Type: text/html; charset=utf8
,您的HTML輸出為UTF-8 Content-Type: text/html; charset=utf8
Content-Type: text/html; charset=utf8
標頭,使用<meta charset="utf8">
標記(對於HTML5,對於其他HTML變體,請使用<meta http-equiv="Content-Type" content="text/html; charset=utf8">
) 就您的var_dump
,只有一些純文本發送到瀏覽器,而沒有提及任何字符集。 查看規則3,這意味着您的瀏覽器正在以不同的字符集(可能是latin1)顯示此字符,從而為您提供菱形/問號/塊。
如果需要檢查數據是否正確存儲,請使用數據庫客戶端(如PHPMyAdmin)查看記錄。 這樣,您以UTF-8格式查看內容(注意:這是PMA中的設置,因此請檢查它是否未設置為其他字符集!)。
附帶說明一下,將數據庫的文本列的排序規則設置為utf8_general_ci,這不是用於存儲,而是用於排序。 因此,這與您的問題無關,但是這樣做是一個好習慣。
連接數據庫時,應設置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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.