mysql に関する質問です。テーブルの項目ごとの照合順序を latin1_swedish_ci から ujis_japanese_ci に変更したいのですが、どう書くのでしょうか? テーブル全体の照合順序は、phpMyAdminで簡単に変更できるのですが、個別のテーブル項目は簡単に変更できないようです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/03/13 09:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:GreenStar No.1

回答回数192ベストアンサー獲得回数46

ポイント27pt

個別のテーブル項目

変更は不可能! 指定できるのはテーブル作成時のみ!!

http://dev.mysql.com/doc/refman/4.1/ja/charset-column.html


残念だが、新しいテーブルを作って、レコードをコピーするしかない!

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント27pt

テーブルの項目(カラム)の照合順序を変更したいのですね?

新しく追加するデータで反映されれば良いのでしたら、phpMyAdminから簡単に変更できます。

※既に挿入されているデータは文字化けします。

1.phpMyAdminにログインして目的のデータベースのテーブルを表示します。

2.「構造」タブをクリック

3.目的のカラムの変更アイコン(鉛筆の絵)をクリック

4.「照合順序」で「ujis_japanese_ci」を選択

5.「保存する」ボタンをクリック

※phpMyAdminのバージョンによってメニューの遷移順が違う可能性があります。

SQL文で実行するには以下のように実行します。

LTER TABLE テーブル名 MODIFY カラム名 カラムのタイプ CHARACTER SET ujis;

http://dev.mysql.com/doc/refman/5.1/ja/charset-conversion.html


文字化けさせずに照合順序を変更したい場合は、ダンプデータを出力してから戻すしかないと思います。

方法は、以下のフォーラムの記事を参考にしてください。

http://www.xugj.org/modules/QandA/index.php?topic_id=1472

具体的には、ターミナル(winの場合はコマンドプロンプト)から、コマンド操作で以下を実行してバックアップします。

mysqldump  --user=ユーザー名 --password=パスワード --default-character-set=latin1
 データベース名 > 保存するファイルパス+ファイル名.sql

次に、出力したファイル中の「latin1」を「ujis」に変更します。

※出力されるファイルはUTF-8だった場合は、文字化けしていない事を確認してから、文字コードをEUCに変更して保存し直してください。

(ファイルの文字コードをUTF-8のままでリストアを実行する場合は、「SET NAMES utf8」とすれば大丈夫かもしれません。※いづれの場合も、カラムのデータ挿入部分の「CHARSET=latin1」は「CHARSET=ujis」にします。)

※テーブルにデータを挿入した方法によっては、上記の方法でも文字化けしたデータしか出力されない場合もあります。

id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54

ポイント26pt

MySQLのバージョンを、明記するようにしてください。

MySQL 5.1なら、ALTER TABLEのCHANGE句を使って、列の定義変更が可能です。今回のように列名は同じで、データ型などを変更する場合は、同じ列名を指定することになります。

alter table t1
 change c3 c3 varchar(10) character set ujis collate ujis_japanese_ci

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.8 CREATE TABLE 構文

  • id:GreenStar
    5.1用のリンクを忘れていた! 5.1でも出来ないという回答はそのまま!!
    http://mirrors.dotsrc.org/mysql/doc/refman/5.1/ja/charset-column.html
  • id:rouge_2008
    すみません。改行されていますね。
    次のように1行で実行してください。

    mysqldump --user=ユーザー名 --password=パスワード --default-character-set=latin1 データベース名 > 保存するファイルパス+ファイル名.sql

    ※出力されたファイルの文字コードがSJISだった場合も、同じように文字化けしていないことを確認してから、文字コードの変換と記述の修正を行ってデータベースにインポートしてください。
  • id:rouge_2008
    レンタルサーバーなのでmysqldumpを実行出来ないという場合は、ローカルにMySQLを使える環境を構築するといいです。
    サーバーのphpMyAdminからSQL形式でエクスポートしたファイルを、ローカルのMySQLにphpMyAdminでインポートしてから回答の操作を実行します。
    ※エクスポートしたファイルは「なぜか文å」のように文字化けしているはずですが、そのまま戻してサーバー側と同じ状態にします。(データベースの各テーブルも「latin1」にしておきます。)

    ※こちらでは、MySQLのバージョン5.0.xと5.1.x間では問題なく実行できました。
    この方法を実行する場合は、サーバー側となるべくバージョンが近い環境を構築して試してみてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません