Q53:XAMPPの設定について
Q53-1:
MySQLコマンドラインから、SHOW VARIABLES LIKE 'char%';を実行してみると、下記のようになります。
>
> Variable_name Value
> character_set_client utf8
> character_set_connection sjis
> character_set_database sjis
> character_set_filesystem binary
> character_set_results utf8
> character_set_server sjis
> character_set_system utf8
> character_sets_dir C:\xampp\mysql\share\charsets\
この状態で、MyODBCを利用して、AccessからMySQLへデータベースへエクスポートしました。MyODBCでは、
INItial Statement : SET NAMES SJIS
Charcter Set : sjis
としています。
このデータベースへXAMPP上から下記のSQLを実行するとエラーが表示されます。
実行した SQL:
SELECT DATE_FORMAT( "all_job". "日付", '%m/%d' ) AS `月日` , `作番` , sum( `all_job`.`時間1` ) AS `時間1の合計(h)`
FROM `all_job` , `machine`
WHERE `all_job`.`日付`
BETWEEN `2007-2-1`
AND `2007-2-15`
AND `all_job`.`機械ID` = `machine`.`工程ID`
AND `all_job`.`時間1` IS NOT NULL
AND `machine`.`略称` = 'NCLE7'
GROUP BY `all_job`.`日付` , `all_job`.`作番`
LIMIT 0 , 30
MySQLのメッセージ:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '."?―\a"?~",'%m/%d') as `?oe^?―\`,`a"1/2oec,.^(a)`, sum(`all_job`.`?^(TM),e'--“1`) as `?^(TM),e'--“1a~
また、直接関係があるか分りませんが、同じテーブルに対して、テーブル構造を変更しようとしたところ下記のエラーが表示されました。さらに、エラーが表示されたのにテーブル構造はちゃんと変更されていました。
実行した SQL:
SELECT `mimetype` , `comment`
FROM `phpmyadmin`.`pma_column_info`
WHERE `db_name` = 'testdb'
AND `table_name` = 'all_job'
AND `column_name` = '時間1'
MySQLのメッセージ: ドキュメント
#1267 - Illegal mix of collations (latin1_general_ci,IMPLICIT) and (sjis_japanese_ci,COERCIBLE) for operation '='
日本語を含まないSQL文は問題なく実行できました。できれば、テーブルのフィールド名は日本語で行いたいのですがこれらの問題にどう対処すればよいのでしょうか?
A53-1:
@以前『PHPAdmin(PHP)やMZPlatform(JDBC)を通しての「SHOW VARIABLES 」の結果は、全て「SJIS」にならなくても良い場合がある』と回答致しましたが、MySQLコマンドラインでcharacter_set_client、character_set_resultsがUTFになっているのはやはり気になります。
今一度my.confの文字設定を御確認下さい。
ASQLSyntaxErrorですが、
・SELECT DATE_FORMAT( "all_job". "日付", '%m/%d' )のテーブル名、列名が「"」で囲われています。
・BETWEEN `2007-2-1` AND `2007-2-15`で日付データ部分を「`」で囲っています。
まずは上記部分を直してもう一度お試し下さい。
B「Illegal mix of collations」のメッセージはサーバー側がlatin1、クライアント側がsjisであることを示しています。以前作ったlatin1のデータベース・テーブルが残っていて、そのテーブルを操作したということはないでしょうか。
Q53-2:
現在使用しているXAMPPなどのヴァージョンを説明していないことに気づきました。
XAMPP : 1.6.6a
MySQLサーバ : 5.0.51a
phpMyAdmin : 2.11.4
となります。誠に申し訳ありません。
@my.confに関して
もう一度my.confを確認して、文字設定を確認しましたが、
[client]
default-character-set=sjis
[mysqld]
default-character-set=sjis
skip-character-set-client-handshake
[mysqldump]
default-character-set=sjis
[mysql]
default-character-set=sjis
と追加しています。
[isamchk]、[myisamchk]、[mysqlhotcopy]は初期状態です。
ASQLエラーについて
指摘された部分を修正してみたところ、phpMyAdmin、MZPlatform上からでも問題なく実行することが出来ました。ありがとうございます。
B「Illegal mix of collations」について
XAMPPをインストールした際に、最初から作成されているデータベース「mysql」、「phpmyadmin」の2つにlatin1が使用されたままになっています。この2つに対してなんらかの対処を行った方がいいのでしょうか?
A53-2:
Bについてですが、Selectの対象である「phpmyadmin」データベースが「latin1」である限り、同じ様な操作を行えば、同様のエラーメッセージが発生するかと思います。
(「my.cnf」で文字セットを変更すると、通常「mysql」データベースの方は 文字セットが変わるようです)
インストーラーでのインストールではすぐに「phpmyadmin」データベースが作成されてしまうため、作成前に文字セットを変更することはできませんが、果たして Alter Database等で変更して問題が起きないかどうかは、判断しかねます。
MySQLに加えてPHPでの設定なども常に考え合わせなければなりませんが、MZプラットフォームではPHPを使用した事例はございませんので、「phpmyadmin」データベースの扱いに関しては、「Xampp」のサポートフォーラムで聞いて頂いた方が確実かと存じます。