gdtv
(Gdtv)
June 19, 2009, 6:32am
1
$criteria=new CDbCriteria;
$criteria->condition="title like :title";
$criteria->params=array(':title'=>'%中国%');
$pages=new CPagination(Article::model()->count($criteria));
......
出错信息是:
Quote
CDbCommand 无法执行 SQL 语句: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
如果title是英文字就没问题,如果是中文字就出错。
数据库编码是gbk,页面编码是utf8
请问是怎么回事呢?
qiang
(Qiang Xue)
June 19, 2009, 11:52am
4
按照错误信息,这是编码的问题。如果你是全新构造的数据库,建议改成utf8编码的,这样可以免去很多麻烦。
gdtv
(Gdtv)
June 19, 2009, 12:00pm
5
Quote
按照错误信息,这是编码的问题。如果你是全新构造的数据库,建议改成utf8编码的,这样可以免去很多麻烦。
多谢强,不是全新的数据库,是以前的网站留下的数据库
不改变编码,有没有办法解决?
怎么可以将原来的gbk数据库转换为utf8?
qiang
(Qiang Xue)
June 19, 2009, 12:03pm
6
应该是可能的。我以前也碰到过类似的情况,后来是数据库管理员不知道用什么办法把编码改成utf8的。你google看看。
qiang
(Qiang Xue)
June 19, 2009, 2:50pm
8
倒数第二条日志是什么啊?只看到CDbCommand
你的代码是对的。
另外,你能分享一下你是如何转换数据库编码的么?
gdtv
(Gdtv)
June 19, 2009, 2:51pm
9
还是中文的问题
$criteria->condition="title = :title";
$criteria->params=array(':title'=>'中国');
$pages=new CPagination(Article::model()->count($criteria));
已经转换为utf8,只要查询语句中含有中文就出错,不知怎么回事
gdtv
(Gdtv)
June 19, 2009, 3:08pm
13
Quote
多谢强的耐心回复。
我详细说一下:
设置:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
array(
'class'=>'CWebLogRoute',
'levels'=>'trace',
),
),
),
控制器代码:
public function actionList()
{
$criteria=new CDbCriteria;
$criteria->condition="title = :title";
$criteria->params=array(':title'=>'教育规划纲要获4千余建议');
$pages=new CPagination(Article::model()->count($criteria));
$articleList=Article::model()->with('Categories')->findAll($criteria);
}
程序日志如图所示,protected\runtime文件夹里没有错误日志生成。
数据库中有 title=教育规划纲要获4千余建议 这条记录
gdtv
(Gdtv)
June 19, 2009, 3:14pm
14
Quote
我上网找了很多命令行的转换方法,都不行
我现在成功使用的方法是:
一、到http://www.phome.net/ebak2008os/ 下载原版的帝国备份王
二、用我发的附件中的function.php代替帝国备份王原来的function.php
三、用帝国备份王备份数据库
四、新建立一个UTF8的数据库
CREATE DATABASE `数据库名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
五、用帝国备份王备份恢复数据到新的数据库
注意:千万别用修改后的帝国备份王备份其他数据库,因为它会默认更改你的编码
gdtv
(Gdtv)
June 19, 2009, 3:41pm
15
找到原因了,ArticleController.php要保存为utf8编码,yiic tool生成的默认是ansi编码。
sharehua
(8080268)
June 19, 2009, 10:15pm
16
奇怪 我的缺省生成是utf-8,不知道你在哪里设置不一样。
qiang
(Qiang Xue)
June 20, 2009, 12:11am
17
如果文件只包含ascii字符,utf8和ansi是一样的。关键在于你的编辑器缺省用的是什么编码。
system
(system)
June 20, 2009, 2:09am
18
我前两天也在问强哥,有没有办法让yii工具生成的代码默认就是UTf8编码。