竹形様 はじめまして。
hottonと申します、よろしくお願いします。
学校の教材用にこちらの「Java+MySQL+Tomcat」を購入いたしましたが、
自宅の環境が Mac OS X 10.4 となっており、
ところどころで本書通りにいかず、
お力添えを頂けたらと思い書き込みいたしました。
今回の質問内容ですが、
ターミナル上で文字変換を行うと、
打ったその場で文字化けが起こってしまう事への対処法についてです。
恐らく本書のp122にある、
「デフォルト キャラクタ セットの設定」
の様な事を行えれば解決するものだと思いますが、
my.iniにあたるファイルが見当たりませんでした。
MySQLは「mysql-5.1.36-osx10.4-powerpc」
をダウンロードしインストールしました。
またその他のサイトには
「/etc/my.cnf」
のような事を行うと記してありましたが、
手順が1から出ていないと、
実行の検討もつかないような者です。
お忙しいところとは思いますが何卒よろしくお願いします。
hottonと申します、よろしくお願いします。
学校の教材用にこちらの「Java+MySQL+Tomcat」を購入いたしましたが、
自宅の環境が Mac OS X 10.4 となっており、
ところどころで本書通りにいかず、
お力添えを頂けたらと思い書き込みいたしました。
今回の質問内容ですが、
ターミナル上で文字変換を行うと、
打ったその場で文字化けが起こってしまう事への対処法についてです。
恐らく本書のp122にある、
「デフォルト キャラクタ セットの設定」
の様な事を行えれば解決するものだと思いますが、
my.iniにあたるファイルが見当たりませんでした。
MySQLは「mysql-5.1.36-osx10.4-powerpc」
をダウンロードしインストールしました。
またその他のサイトには
「/etc/my.cnf」
のような事を行うと記してありましたが、
手順が1から出ていないと、
実行の検討もつかないような者です。
お忙しいところとは思いますが何卒よろしくお願いします。
投稿:hotton[hotton]/2009年 07月 26日 22時 24分
RE:mac ターミナル上の文字化けについて
by 竹形 誠司[takegata]
竹形です。こんにちは。
ご質問の件、こちらで環境を作って確認しますので、少々お待ちください。
P.S. お買い求めいただいたのは「Java+MySQL+Tomcatで始めるサーバアプリケーション開発入門」でしょうか。本書は内容がだいぶ古くなってしまっているので、教材としてお使いになるのでしたら、後継として出版した「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」の方をお勧めします。
ご質問の件、こちらで環境を作って確認しますので、少々お待ちください。
P.S. お買い求めいただいたのは「Java+MySQL+Tomcatで始めるサーバアプリケーション開発入門」でしょうか。本書は内容がだいぶ古くなってしまっているので、教材としてお使いになるのでしたら、後継として出版した「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」の方をお勧めします。
投稿:竹形 誠司[takegata]/2009年 07月 26日 23時 04分
/更新:2009年 07月 26日 23時 04分
竹形です。
MacOS 10.4にMySQL5.1をインストールして試してみました。
私の環境では、「打ったその場で文字化け」という現象は起こりませんでした。
いろいろ試してみたところ、ターミナルの「文字セットエンコーディング」がISO Latin 1などになっていると化けるようです。
また、MySQLのデフォルトキャラクタセットを指定しなくても(何もしなければ latin1 になります)、端末から読み書きする分には文字化けは起こりませんでした。もちろん、書き込んだときと読み出すときでターミナルの文字コードを変えてしまうと化けます。
ちなみに、MacOSの場合は、mysqlの設定ファイル(/etc/my.cnf)がデフォルトで作成されません。mysql/support-files の下にサンプルがあるので、これらを参考にして作成してください。
文字コードは全部utf-8に統一してしまえば楽なんですが、なかなか、そう簡単にはいかない場合が多いですね。
MacOS 10.4にMySQL5.1をインストールして試してみました。
私の環境では、「打ったその場で文字化け」という現象は起こりませんでした。
いろいろ試してみたところ、ターミナルの「文字セットエンコーディング」がISO Latin 1などになっていると化けるようです。
また、MySQLのデフォルトキャラクタセットを指定しなくても(何もしなければ latin1 になります)、端末から読み書きする分には文字化けは起こりませんでした。もちろん、書き込んだときと読み出すときでターミナルの文字コードを変えてしまうと化けます。
ちなみに、MacOSの場合は、mysqlの設定ファイル(/etc/my.cnf)がデフォルトで作成されません。mysql/support-files の下にサンプルがあるので、これらを参考にして作成してください。
文字コードは全部utf-8に統一してしまえば楽なんですが、なかなか、そう簡単にはいかない場合が多いですね。
投稿:竹形 誠司[takegata]/2009年 07月 27日 00時 24分
/更新:2009年 07月 27日 00時 24分
竹形様
早速のご返信ありがとうございました。
購入いたしましたのは、
「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」
の方でございました。
昨日の件についてですが、
改めて検証いたしましたところ、
下記の様な事象となっておりました。
命令文の中でだと文字化けが起こるようで,
なにも命令を出さない箇所、例えば
mysql>夏目漱石
のように文字化けは起こりませんでした。
また、文字化けのままINSERT INTOと実行し、
SELECTで結果を確認すると
ちゃんと「夏目漱石」と表示されました。
この件に関してはこういう仕様だと諦めるしかないのでしょうか。
尚、ターミナル上の実行結果を
こちらの画面にコピペしたかったのですが、
どうもエラーになってしまうようなので
拙い文章での報告となってしまいました。
あと私の不勉強のいたすところで申し訳ないのですが、
昨日頂いたご返信の中に、
>mysql/support-files の下にサンプルがあるので、これらを参考にして作成
してください。
とございましたが、
mysql/support-filesとはどこにあるものなのでしょうか。
スポットライト機能で検索してみましたが
それらしきものが見当たりませんでした。
なにかとお手数をおかけして申し訳ありませんが、
どうかよろしくお願いします。
早速のご返信ありがとうございました。
購入いたしましたのは、
「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」
の方でございました。
昨日の件についてですが、
改めて検証いたしましたところ、
下記の様な事象となっておりました。
命令文の中でだと文字化けが起こるようで,
なにも命令を出さない箇所、例えば
mysql>夏目漱石
のように文字化けは起こりませんでした。
また、文字化けのままINSERT INTOと実行し、
SELECTで結果を確認すると
ちゃんと「夏目漱石」と表示されました。
この件に関してはこういう仕様だと諦めるしかないのでしょうか。
尚、ターミナル上の実行結果を
こちらの画面にコピペしたかったのですが、
どうもエラーになってしまうようなので
拙い文章での報告となってしまいました。
あと私の不勉強のいたすところで申し訳ないのですが、
昨日頂いたご返信の中に、
>mysql/support-files の下にサンプルがあるので、これらを参考にして作成
してください。
とございましたが、
mysql/support-filesとはどこにあるものなのでしょうか。
スポットライト機能で検索してみましたが
それらしきものが見当たりませんでした。
なにかとお手数をおかけして申し訳ありませんが、
どうかよろしくお願いします。
投稿:hotton[hotton]/2009年 07月 28日 00時 58分
/更新:2009年 07月 28日 01時 00分
私の環境では、ターミナルで日本語を扱えているので、仕様ということではないと思います。こんな感じです。

MacのターミナルでMySQL
Macのターミナルの文字セットエンコーディングがどうなっているか確認してみてください。このウィンドウは[ターミナル]メニューの[ウィンドウ設定]を選び、ウィンドウ上部のプルダウンリストで[ディスプレイ]を選択すると表示されます。

ターミナルの文字セットエンコーディング
デフォルトの設定でインストールすると、/usr/localの下にmysqlのディレクトリが作られると思います。その下に support-files というディレクトリがないか探してみてください。

MacのターミナルでMySQL
Macのターミナルの文字セットエンコーディングがどうなっているか確認してみてください。このウィンドウは[ターミナル]メニューの[ウィンドウ設定]を選び、ウィンドウ上部のプルダウンリストで[ディスプレイ]を選択すると表示されます。

ターミナルの文字セットエンコーディング
デフォルトの設定でインストールすると、/usr/localの下にmysqlのディレクトリが作られると思います。その下に support-files というディレクトリがないか探してみてください。
投稿:竹形 誠司[takegata]/2009年 07月 28日 02時 51分
/更新:2009年 07月 28日 02時 54分
竹形様
いつもお世話になっております。
>support-files というディレクトリがないか探してみてください。
とありましたので、ターミナル上で、
$ /usr/local/mysql/support-files/
と入力すると
-bash: /usr/local/mysql/support-files/: is a directory
と返されてきました。
こういう事でよろしかったでしょうか。
文字セットエンコーディングは
元は 日本語(Shift JIS) にしておりまして,
その際は例えば「夏目」と入力すると「'〓ト〓レ'」と化けてしまい、
今回 Unicode (UTF-8)にして入力したところ「??????」と化けました。
しかし、
SELECT *FROM author;
で結果を見てみると「夏目」と表示されました。
今のところはこのような具合となっております。
いつもお世話になっております。
>support-files というディレクトリがないか探してみてください。
とありましたので、ターミナル上で、
$ /usr/local/mysql/support-files/
と入力すると
-bash: /usr/local/mysql/support-files/: is a directory
と返されてきました。
こういう事でよろしかったでしょうか。
文字セットエンコーディングは
元は 日本語(Shift JIS) にしておりまして,
その際は例えば「夏目」と入力すると「'〓ト〓レ'」と化けてしまい、
今回 Unicode (UTF-8)にして入力したところ「??????」と化けました。
しかし、
SELECT *FROM author;
で結果を見てみると「夏目」と表示されました。
今のところはこのような具合となっております。
投稿:hotton[hotton]/2009年 07月 29日 01時 23分
Macのターミナルは環境変数を設定しないと文字化けするみたいですね。私は普段、Macをあまり使わないので忘れていましたが、自分のホームディレクトリの.bash_profileファイルにに export LANG=ja_JP.UTF-8 という設定が書いてありました(たぶん自分で書いたのだと思います)。
「Mac ターミナル 文字化け」などで検索してみてください。
>$ /usr/local/mysql/support-files/
>
>と入力すると
>
>-bash: /usr/local/mysql/support-files/: is a directory
>
>と返されてきました。
>こういう事でよろしかったでしょうか。
$ls /usr/local/mysql/support-files
を実行してみてください。my-small.cnfとか、my-medium.cnfなどのファイルが見つかると思います。ただ、私の環境では、my.cnfで設定しなくても(文字コードがlatin1のままで)文字化けしないので、とりあえず環境変数を設定して試してみてはいかがでしょう。
「Mac ターミナル 文字化け」などで検索してみてください。
>$ /usr/local/mysql/support-files/
>
>と入力すると
>
>-bash: /usr/local/mysql/support-files/: is a directory
>
>と返されてきました。
>こういう事でよろしかったでしょうか。
$ls /usr/local/mysql/support-files
を実行してみてください。my-small.cnfとか、my-medium.cnfなどのファイルが見つかると思います。ただ、私の環境では、my.cnfで設定しなくても(文字コードがlatin1のままで)文字化けしないので、とりあえず環境変数を設定して試してみてはいかがでしょう。
投稿:竹形 誠司[takegata]/2009年 07月 29日 04時 06分
/更新:2009年 07月 29日 04時 27分
竹形様
いつもお世話になっております。
先日ご教授頂いたように、
ターミナルの文字エンコーディングをutf-8にし、
ホームディレクトリに.bash_profileというファイルを作成し、
export LANG=ja_JP.UTF-8と記入し保存をしました。
ただ、依然として文字化けは解消されておりません。
実行結果に支障があるわけではなさそうなので、
使い続ける事は可能なのですが・・・
また、my.cnfを作成するにあたり、
mkdir etc
を/mysql上で実行しetcというディレクトリを作成し、
次に
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
としたのですが
/etc上で
ls
をしても my.cnf が表示されませんでした。
なので、/etc上で my.cnf を作成しようと
emacs my.cnf
をしたのですが、いざ書き込もうとすると
Buffer is read-only
とされ何も編集ができませんでした。
度重なる投稿で大変恐縮なのですが、
なにか修正できそうなところがあれば、
ご指摘をお願いいたします。
失礼いたします。
いつもお世話になっております。
先日ご教授頂いたように、
ターミナルの文字エンコーディングをutf-8にし、
ホームディレクトリに.bash_profileというファイルを作成し、
export LANG=ja_JP.UTF-8と記入し保存をしました。
ただ、依然として文字化けは解消されておりません。
実行結果に支障があるわけではなさそうなので、
使い続ける事は可能なのですが・・・
また、my.cnfを作成するにあたり、
mkdir etc
を/mysql上で実行しetcというディレクトリを作成し、
次に
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
としたのですが
/etc上で
ls
をしても my.cnf が表示されませんでした。
なので、/etc上で my.cnf を作成しようと
emacs my.cnf
をしたのですが、いざ書き込もうとすると
Buffer is read-only
とされ何も編集ができませんでした。
度重なる投稿で大変恐縮なのですが、
なにか修正できそうなところがあれば、
ご指摘をお願いいたします。
失礼いたします。
投稿:hotton[hotton]/2009年 07月 31日 00時 52分
echo $LANG を実行して環境変数が正しく設定されているかどうか確認してみてください。.bash_profileの設定は次に開いたときから有効になります。
投稿:竹形 誠司[takegata]/2009年 07月 31日 22時 09分
/更新:2009年 07月 31日 22時 09分
竹形様
いつもお世話になっております。
echo $LANG
の実行結果は、
ja_JP.UTF-8
と出ました。
他になにか思い当たる節はございますでしょうか。
いつもお世話になっております。
echo $LANG
の実行結果は、
ja_JP.UTF-8
と出ました。
他になにか思い当たる節はございますでしょうか。
投稿:hotton[hotton]/2009年 08月 01日 23時 12分
>echo $LANG
>の実行結果は、
>ja_JP.UTF-8
>と出ました。
それならいいはずですねぇ。
では /etc/my.cnf に次のように書いてみてください。
>の実行結果は、
>ja_JP.UTF-8
>と出ました。
それならいいはずですねぇ。
では /etc/my.cnf に次のように書いてみてください。
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
/etc の下は管理者権限がないと書き込めないので、suコマンドで権限を取得するか、sudoコマンドでエディタを起動してください。default-character-set=utf8
[mysqld]
default-character-set=utf8
投稿:竹形 誠司[takegata]/2009年 08月 02日 19時 28分
/更新:2009年 08月 02日 19時 28分
竹形様
いつもお世話になっております。
sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
を実行した後に
/usr/local/mysql/etc のところで
ls
をしても
my.cnfが表示されませんでしたので
デスクトップでmy.cnfを作成し、
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
と、書き込んで、
mvで/etc/my.cnfに移動させました。
mysql> show variables like 'char%';
で、確認してみたのですが、
character_set_client | latin1
character_set_connection | latin1
character_set_database | latin1
character_set_filesystem | binary
character_set_results | latin1
character_set_server | latin1
character_set_system | utf8
と、ほとんどが latin1 のままとなっておりました。
せっかくご指導を頂いているのですが、
理解に至らなくて大変恐縮しております。
いつもお世話になっております。
sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
を実行した後に
/usr/local/mysql/etc のところで
ls
をしても
my.cnfが表示されませんでしたので
デスクトップでmy.cnfを作成し、
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
と、書き込んで、
mvで/etc/my.cnfに移動させました。
mysql> show variables like 'char%';
で、確認してみたのですが、
character_set_client | latin1
character_set_connection | latin1
character_set_database | latin1
character_set_filesystem | binary
character_set_results | latin1
character_set_server | latin1
character_set_system | utf8
と、ほとんどが latin1 のままとなっておりました。
せっかくご指導を頂いているのですが、
理解に至らなくて大変恐縮しております。
投稿:hotton[hotton]/2009年 08月 05日 00時 41分
my.cnfを書き込んだ後、MySQLを再起動しましたか?
あと、my.cnfの場所は
/usr/local/mysql/etc
ではなく
/etc
です。
念のため。
あと、my.cnfの場所は
/usr/local/mysql/etc
ではなく
/etc
です。
念のため。
投稿:竹形 誠司[takegata]/2009年 08月 05日 02時 29分
/更新:2009年 08月 05日 02時 32分
竹形様
いつもお世話になっております。
ご返信が遅くなり大変失礼しました。
my.cnf に関しましては、ご指摘の通り保存場所が間違っておりました。
現在は /etc に保存したところ
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
と、一応当初の目的は果たせました。
文字化けの件はあいかわらず解消とはなっておりませんが、
これまでのところで何か見落としがないか確認し、
また、自分でできるだけ調べてみたいと思います。
unixコマンドはこれまで使用する機会が少なかったので、
今回は大変良い勉強となりました。
この度は細かい点までご指導を頂き誠にありがとうございました。
失礼いたします。
いつもお世話になっております。
ご返信が遅くなり大変失礼しました。
my.cnf に関しましては、ご指摘の通り保存場所が間違っておりました。
現在は /etc に保存したところ
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
と、一応当初の目的は果たせました。
文字化けの件はあいかわらず解消とはなっておりませんが、
これまでのところで何か見落としがないか確認し、
また、自分でできるだけ調べてみたいと思います。
unixコマンドはこれまで使用する機会が少なかったので、
今回は大変良い勉強となりました。
この度は細かい点までご指導を頂き誠にありがとうございました。
失礼いたします。
投稿:hotton[hotton]/2009年 08月 07日 23時 05分
あと、もうひとつ注意点なんですが、
default-character-set がlatin1のときに作成したdatabase領域は、
default-character-set=latin1のままです。
必要なデータが入っていなければ、一度 drop database して create database しなおすとよいでしょう。
default-character-set がlatin1のときに作成したdatabase領域は、
default-character-set=latin1のままです。
必要なデータが入っていなければ、一度 drop database して create database しなおすとよいでしょう。
投稿:竹形 誠司[takegata]/2009年 08月 08日 09時 52分
/更新:2009年 08月 08日 09時 52分