inMotion でデータベースを作成する際は、「cPanel」の「MySQL Database Wizard 」などで作成するため、「phpMyAdmin」の「データベース」→「データベースを作成する」で「照合順序」を指定して作成することができない。
このため、データベース作成後、必要であれば文字コードを変更する。
下記のスクリプト(convert.php)を作成し、適当なディレクトリにアップロードして、スクリプトを実行すると、指定したデータベースの文字コードを変更できる。
追加情報
2013年9月4日
本日データベースを追加する際に、「MySQL Database Wizard 」でデータベースを作成後、「phpMyAdmin」で作成したデータベースを選択し、上部のタブの「操作」をクリックすると、以下のような画面が表示された。
初期状態では文字コードは「latain1_swedish_ci」になっている。
ここの「照合順序」で文字コードを設定できるので、プルダウンから「utf8_general_ci」を選択して「実行」をクリック。
以前 inMotion に問い合わせたときは、スクリプトを使って変更する方法を教えてもらったが、こちらの方が簡単。
上記の方法が使えない場合は以下のような方法もある。
以下は(スクリプトを使って)データベースの文字コードを「UTF-8」(utf8_general_ci)に変更する例。
How to Convert a Database to UTF-8
<?php // convert.php // 下記の$db_server,$db_user,$db_password, $db_name, $char_set の値を自分の設定に書き換える。 $db_server = 'localhost'; //通常はこのままでOK $db_user = 'database user'; // データベースユーザー名を指定 $db_password = 'password'; //パスワードを指定 $db_name = 'database name'; //文字コードを変更するデータベース名を指定 $char_set = 'utf8'; //文字コードを指定(この場合はUTF-8) // Adds the header information header('Content-type: text/plain'); // MySQL database に接続 $connection = mysql_connect($db_server, $db_user, $db_password) or die(mysql_error() ); $db = mysql_select_db($db_name) or die( mysql_error() ); // クエリを発行し結果を変数に代入 $sql = 'SHOW TABLES'; $result = mysql_query($sql) or die( mysql_error() ); // ループで指定したデータベース内の全てのテーブルの文字コードを変更 while ( $row = mysql_fetch_row($result) ) { $table = mysql_real_escape_string($row[0]); $sql = "ALTER TABLE $table CONVERT TO CHARACTER SET $char_set COLLATE utf8_general_ci"; mysql_query($sql) or die( mysql_error() ); print "$table changed successfully.\n"; } // データベース自身の 文字コードを変更 $sql = "ALTER DATABASE CHARACTER SET $char_set;"; mysql_query($sql) or die( mysql_error()); print "Database collation has been updated successfully.\n"; //データベース接続を解除 mysql_close($connection); ?>
上記スクリプトを実行するには、ブラウザから「http://your-domain.com/convert.php」にアクセスするだけ。(ルート直下にconvert.phpをおいた場合。convert.php を配置したディレクトリによりアドレスは異なる)
データベースを作成した直後の場合(テーブルがまだない場合)は、成功すればブラウザに「Database collation has been updated successfully.」とだけ表示される。
但し、このスクリプトは、パスワードやユーザー名を含むので、使用後は削除する。再利用する場合は、ユーザーがアクセスできない場所に保存する。
パスワードやユーザー名などは、下記のようにして「db_vars.php」というファイルを作成し、外部からアクセスできないディレクトリ「etc」以下などに置くことも可能。この場合も使用後は、削除するか、再利用する場合は、パスワードやユーザー名などの値は削除する。
新しくデータベースを作成して、文字コードを変更する必要があれば、「db_vars.php 」のほうの値を更新して「convert.php」を実行する。
<?php // db_vars.php この例では「/home/xxxx/etc/db_vars.php」に配置 //それぞれの値を定数として設定 define('DB_ADDRESS', 'localhost'); define('DB_NAME', 'データベース名'); define('DB_USER', 'データベースユーザー名'); define('DB_PASSWORD', 'パスワード'); ?>
convert.php を以下のように変更。
<?php // convert.php //require で db_vars.php の値を読み込む require '/home/xxxx/etc/db_vars.php'; $db_server = DB_ADDRESS; $db_user = DB_USER; $db_password = DB_PASSWORD; $db_name = DB_NAME; $char_set = 'utf8'; //以下は同じ header('Content-type: text/plain'); $connection = mysql_connect($db_server, $db_user, $db_password) or die(mysql_error() ); $db = mysql_select_db($db_name) or die( mysql_error() ); $sql = 'SHOW TABLES'; $result = mysql_query($sql) or die( mysql_error() ); while ( $row = mysql_fetch_row($result) ) { $table = mysql_real_escape_string($row[0]); $sql = "ALTER TABLE $table DEFAULT CHARACTER SET $char_set COLLATE utf8_general_ci"; mysql_query($sql) or die( mysql_error() ); print "$table changed successfully.\n"; } $sql = "ALTER DATABASE CHARACTER SET $char_set;"; mysql_query($sql) or die( mysql_error()); print "Database collation has been updated successfully.\n"; mysql_close($connection); ?>
データベースの文字コードを確認するには以下の SQL 文を実行する。
SHOW VARIABLES LIKE "char%";
初期状態では以下のような結果になる。
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
convert.php を実行後確認すると以下のようになっている。
(character_set_database が「latin1」から「utf8」に変わっている)
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8