在mysql中保存文本字段时,Utf8字符被切断

时间:2013-07-12 21:31:52

标签: mysql cakephp utf-8

我正在开设一个网站,我们会在文本字段中保存日文字符。

表格如下:

| 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)即可保存数据(未更改任何有关保存方式的信息,模型本身为空)。没有特殊的数据库设置。只需设置主机,登录,持久=> false,driver => mysql,数据库,前缀。

1 个答案:

答案 0 :(得分:0)

您的数据库和表格可能位于latin1 默认排序规则之下,因此在数据库配置中没有'encoding' => 'utf8',蛋糕将与latin1中的数据库通信。将UTF转码为latin1和后退会留下数据丢失的空间。这不是蛋糕的问题。

因此,继续将连接更改为UTF以及DB中的所有默认排序规则。新保存的数据将显示正常,对于旧的数据将依赖,我不会详细说明因为它不在上下文中。