[Codeigniter-users] 1.6.0 と MySQL文字コード

Zurück zum Archiv-Index

Kenji kenji****@club*****
2008年 2月 3日 (日) 14:00:42 JST


Kenji です。


スレッドを切りました。

On Sun, 3 Feb 2008 13:10:23 +0900
"千葉豊" <yutak****@gmail*****> wrote:

> こんにちは。千葉です。
> 
> kenjiさん、回答ありがとうございます。
> 
> >1.5.4 のときは、文字コードに関しては、何もしていじってなかったのでしょうか?
> >1.5.4 以前は、通常ですと、set names などを発行するように CI 自体に手を加えている
> >ケースが多いと思いますが。
> 
> 1.5.4の際は文字コードについては何もいじっていません。
> ちなみに、1.6.0になって文字化けたので、ネットで見つけた情報を参考にDB_Driver.phpで、SET NAMES UTF8
> を実行するように手を加えてみたのですが変化はありませんでした。

「ネットで見つけた情報」自体がもっと汎用的に修正されて CI 1.6.0 に取り込まれている
という状態です。


> >また、実際に使用されている文字コードは何でしょうか?
> PHPの文字コードはUTF8を使用しています。
> mysql には特に文字コードの設定はしていません。

以下のコードで、現状が正確に把握できるのではないかと思います。
たぶん、最初に示されたものと同じく Latin1 かなと思いますが。

<?php
class Mysql_character extends Controller {
	
	function index()
	{
		$this->load->database();

		$query = $this->db->query("SHOW VARIABLES LIKE 'character%'");

		foreach ($query->result() as $row)
		{
			echo $row->Variable_name;
			echo ': ';
			echo $row->Value;
			echo '<br />';
		}
	}
}
?>


> >これは、どういうエラーになるのでしょうか?
> >正確なエラーメッセージは何でしょうか?
> 
> Unable to set client connection character set: ujis
> Unable to set client connection character set: latin1
> 
> というエラーが出ています。

database/DB_driver.php の 198行目以降の以下のところですね。
不思議ですね。どうしてエラーが出るのだろう?

この部分は、

 SET NAMES utf8 COLLATE utf8_general_ci;

のようなクエリを発行しているだけなんですが。

			if (! $this->db_set_charset($this->char_set, $this->dbcollat))
			{
				log_message('error', 'Unable to set database connection charset: '.$this->char_set);
			
				if ($this->db_debug)
				{
					$this->display_error('db_unable_to_set_charset', $this->char_set);
				}
				
				return FALSE;
			}


> ひとまず、1.5.4に戻して使っています。

1.5.4 でなにもせず正常だったということですので、上記のコードを
コメントにすれば、動くんじゃないかとは思いますが、そもそもの状態の
文字コード設定がまずい気がします。

http://pbx.homeunix.org/p_blog/forum/topic.php?tid=320&p=&pn=&pm=35&qid=2007
に少々かかれていますが、Latin1 <-> Latin1 で、文字化けが“見かけ上”
発生していない状態なのではないかと、思います。


> 08/02/03 に Kenji <kenji****@club*****> さんは書きました:
> >
> > Kenji です。
> >
> >
> > こんにちは。
> >
> > On Sun, 3 Feb 2008 03:18:15 +0900
> > "千葉豊" <yutak****@gmail*****> wrote:
> >
> > > はじめまして
> > >
> > > 千葉といいます。よろしくお願いします。
> > > 最近CodeIgniterを使い始めました。
> > >
> > > CodeIgniterを1.5.4 から 1.6.0にアップグレードしたところ、MySQLとのデータの受け渡しで
> > > 文字化けするようになってしまい困っています。1.5.4では文字化けはありませんでした。
> >
> > 1.5.4 のときは、文字コードに関しては、何もしていじってなかったのでしょうか?
> >
> > 1.5.4 以前は、通常ですと、set names などを発行するように CI 自体に手を加えている
> > ケースが多いと思いますが。
> >
> > また、実際に使用されている文字コードは何でしょうか?
> >
> >
> > > MySQLのバージョンは4.1.22です。
> > > 文字コード周りの設定はデフォルトのまま使用しています。
> > > Server version:        4.1.22-standard
> > > Protocol version:    10
> > > Connection:        Localhost via UNIX socket
> > > Server characterset:    latin1
> > > Db     characterset:    latin1
> > > Client characterset:    latin1
> > > Conn.  characterset:    latin1
> > > UNIX socket:        /tmp/mysql.sock
> >
> >
> > > PHP5を使用しています。
> > > PHP 5.2.4 (cli) (built: Sep 23 2007 22:34:35)
> > > Copyright (c) 1997-2007 The PHP Group
> > > Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
> >
> >
> > > config/database.php に文字コード関連の設定項目が増えていたので、
> > > この値をあれこれいじってみたのですが、デフォルトで設定されている、
> > > 'utf8', 'utf8_general_ci' 以外の値(ujisとかlatin1とか)を設定してもエラーとなってしまいます。
> >
> > これは、どういうエラーになるのでしょうか?
> > 正確なエラーメッセージは何でしょうか?
> >
> >
> > // Kenji
> >
> > _______________________________________________
> > Codeigniter-users mailing list
> > Codei****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >
> 




Codeigniter-users メーリングリストの案内
Zurück zum Archiv-Index