MySQL トラブル事例

文字コード変換でのトラブル、 MySQL 運用時のトラブルなど、MySQL ご利用時によくお問い合わせいただくトラブルの解決策です。
  1. サーバキャラクタセットを sjis に設定して、「あ」という字を挿入しましたが、「?」と文字化けしてしまいます。(MySQL 4.1、MySQL 5.0)

    MySQL 4.0 までは、サーバとクライアント間で文字コードの変換は行なわれませんでした。ところが MySQL 4.1 からは新たに実装された自動変換機能のため、サーバとクライアントのキャラクタセットが異なる場合にはこのようなトラブルが生じます。サーバとクライアントのキャラクタセットを統一するか、変換元キャラクタセットと変換先キャラクタセットの互換性を理解して使用してください。

    [⇒個別ページで表示]
  2. MySQL 4.1 以上でサーバ、クライアントのキャラクタセットを sjis に統一しています。しかし、PHP でデータ内容が文字化け表示されています。(MySQL 4.1、MySQL 5.0)

    下記のいずれかの操作を行ないます。

    1. バイナリ配布のクライアントライブラリのキャラクタセットが LATIN 1 であることが原因です。クライアントライブラリをソースからコンパイルしてください。コンパイル時に「./configure –with-charset=sjis」とオプションを指定してください。
    2. MySQL に接続直後に、「SET NAMES SJIS;」を実行してください。
    3. mysqld 起動時に、オプション「–skip-character-set-client-handshake」を指定してください。(MySQL 5.0のみ)
    [⇒個別ページで表示]
  3. sjisで、「①(丸数字)」あるいは「髙(ハシゴ高)」などの字が文字化けが発生します。 (MySQL 4.1、MySQL 5.0)

    sjis、ujisでは、「①(丸数字)」あるいは「髙(ハシゴ高)」などのシステム外字はサポートしていないため、文字化けが発生します。cp932(MySQL4.1.12以降)、ucs2は対応しています。

    [⇒個別ページで表示]
  4. sjisで「㈱(カッコ株)」の字が文字化けします。

    キャラクタセットを「cp932」に指定してください。(MySQL4.1.12以降)

    [⇒個別ページで表示]
  5. ujisで「㈱(カッコ株)」の字が文字化けします。

    キャラクタセットを「eucjpms」に指定してください。(MySQL5.0のみ)

    [⇒個別ページで表示]
  6. sjis 設定でサーバとクライアントは統一されています。「表示」と入力したにも関わらず、「侮ヲ」と表示されてしまいます。 (MySQL 4.0、4.1、5.0 共通)

    「表」の字のシフトJISコードは「95 5C」、「示」は「8E A6」、「侮」は「95 8E」、「ヲ(半角)」は「A6」です。
    表の「5C」の部分は、メタ文字(特殊文字)の「\」を表します。「\」が文字列中にあると、それはエスケープ記号として単に取り去られてしまいます。この場合の対処法は、「表」の直後に「\」を入れる、すなわち「表\示」と入力して下さい。

    [⇒個別ページで表示]
  7. MySQL に root ユーザとしてログインしたいのですが、root のパスワードを忘れてしまいました。(MySQL 4.0、4.1、5.0 共通)

    Windows の場合「mysqld –skip-grant-tables」、UNIX の場合「mysqld_safe –skip-grant-tables &」で GRANT テーブルを読み込まずに起動します。次にユーザやパスワードを指定せずに単に「mysql」と入力するだけで、MySQL に接続でき、mysql データベースに入ることができます。mysql データベースの、user テーブルに対し「UPDATE user SET PASSWORD=PASSWORD(“新パスワード”) WHERE user=”root”;」を実行し、新パスワードを設定します。GRANT テーブルを読み込んでいない場合、SET PASSWORD コマンドは使用できないことにご注意ください。「FLUSH PRIVILEGES;」を実行し、ログアウト後「mysqladmin shutdown」でサーバを停止し、「mysqld」または「mysqld_safe」で通常に起動しますと、新パスワードでログインできます。

    [⇒個別ページで表示]
  8. 数値型カラムに AUTO_INCREMENT を指定して、データを4件挿入しました。DELETE 文でデータを消去し、再度挿入しましたが、数値型カラムが5から始まります。1から挿入したいのですが、どうすればいいのですか?(MySQL 4.0、4.1、5.0 共通)

    MyISAM テーブルであれば、DELETE 文ではなく TRUNCATE 文を実行することで、カラムを再び1から入力できます。MySQL 5.0 では、MyISAM、 InnoDB 共にこの方法でリセットできます。MySQL 4.0、4.1では、MyISAM ではリセットできますが、InnoDB のリセットはできません。

    [⇒個別ページで表示]