2013-07-12 54 views
0

我正在一個網站中保存日文字符在文本字段中。當在mysql中保存文本字段時截斷Utf8字符

表看起來是這樣的:

| contactlogs | CREATE TABLE `contactlogs` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`contact_email` varchar(128) CHARACTER SET latin1 NOT NULL, 
`name` varchar(128) CHARACTER SET latin1 DEFAULT NULL, 
`company_name` varchar(128) CHARACTER SET latin1 DEFAULT NULL, 
`email` varchar(128) CHARACTER SET latin1 DEFAULT NULL, 
`telephone` varchar(30) CHARACTER SET latin1 DEFAULT NULL, 
`fax` varchar(30) CHARACTER SET latin1 DEFAULT NULL, 
`subject` text COLLATE utf8_unicode_ci NOT NULL, 
`message` text COLLATE utf8_unicode_ci NOT NULL, 
`created` datetime DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | 

當我取回被撲出,消息字段經常切斷,並在最後一個垃圾字符的數據(我假設,因爲它可能尚未儲存所有數據的最後一個字符

該網站本身是在cakephp。數據正在保存,只是做一個$ this-> model-> save($ data)(沒有改變任何關於它的方式模型本身是空的)沒有特殊的數據庫設置,只需設置host,login,persistent => false,driver => mysql,數據庫,前綴

+0

'CHARACTER SET latin1' ...從什麼時候開始是'latin1'的日語部分? –

+0

這些拉丁文的行並不意味着要存儲日文字符。只有那些整理了utf8_unicode_ci的字段是。是的,我知道它可能看起來應該是utf8,但是它是針對預先存在的網站的,我想盡可能避免更改數據庫設置。 (雖然我完全不相信可以在不這樣做的情況下修復此錯誤) – Kai

+0

您可能需要在[配置](http://book.cakephp)中將數據庫連接的編碼設置爲utf8 .ORG/2.0/EN /開發/ configuration.html)。默認通常是latin1。 – mata

回答

0

你的數據庫和表格可能在拉丁語1 默認排序規則,所以沒有'encoding' => 'utf8'在你的數據庫配置蛋糕是要與拉丁語中的數據庫交談。將UTF轉碼爲latin1和後臺會留下數據丟失的空間。這不是蛋糕的問題。

因此,繼續並將連接更改爲UTF和DB中的所有默認排序規則。新保存的數據將被正確顯示,對於舊的數據將取決於我將不會詳述,因爲它與上下文無關。