• ベストアンサー

テーブルごとに文字コード指定

データベースの文字コードをUNICODEにしたいのですが、 レンタルサーバーを使っており、データベースはEUCのものしか使えません。 そこでテーブルごとに文字コードを指定して作成しようと思ったのですが、 うまくUNICODEのテーブルができません。 以下の記述でEUCのデータベースにUTF-8のテーブルを作成しています。 どこか間違っていますでしょうか? ------------------------------ create table テーブル名 (  id integer,  name varchar(120) ) CHARACTER SET utf8; ----------------------------- お詳しい方がおられましたらご回答下さい。 宜しくお願い致します。

  • MySQL
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

そのレンタルサーバーのMySQLのversionが問題です。 以前から4.0で運用されているところは、4.1以上にすると、不具合出まくりになるので4.0のままのところも多いです。 4.0だと、ujis(= EUC-JP)かsjisしか使えません。4.0では、クライアントとサーバー間での文字コード変換は行われないので、文字列型にbineryを追加して、データを入れる時に、escapeしていれば、とりあえずunicodeでもいれれて、取り出し時に適切に文字コードを判定出来れば表示できるかもしれません。 が、ソートや検索時にはエラーになったり、きちんとマッチしない可能性があります。

その他の回答 (1)

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

経験は少ないのですが、 mysqlのバージョンによってそのコマンドがうまく行く場合とそうでない場合があるのではないでしょうか。 またうまく行っていないことの確認は何で行っているのでしょうか。 サーバとクライアントのキャラクタセットが異なるとき、結果の文字コードがクライアントのキャラクタセットに合わせて自動変換されるはずです。(ただしver.4.1.1以降) さらに、Linuxのterminalは、文字コードを変換できますが、Windowsのコマンドプロンプト確か変更できないかと思います。したがって確認も慎重にやる必要があります。

関連するQ&A

  • PHPの文字コードについて

    PHPとmysqlの文字コードの関係について 1.データベースは文字コード utf8_unicode_ci で作成しています。 2.以下のようにテーブルを作成しました。 CREATE TABLE `test` ( `qid` varchar(10) NOT NULL, `qtitle` varchar(255) default NULL, PRIMARY KEY (`qid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.show.phpの中で以下のように 出力しようとすると文字化けします。 show.phpファイルは文字コードutf8で保存しています。 <?php print($qTitle); ?> ブラウザの文字コードの設定はShift-Jisです。 ブラウザの文字コードを変えずに正しく表示させるためには どうすればいいのですか? ご教授よろしくおねがいします。

    • 締切済み
    • PHP
  • SQLServer2005と文字コード

    ある米国のJavaで作られたWebアプリケーションパッケージソフトウェアをインストールしました。環境はSQLServer2005 + Tomcat 6.0で、その上にこのパッケージがインストールされて動作しています。基本的に米国の製品なので英語を前提としていますが、今回は日本語のOS、日本語SQLServer上にインストールしました。このパッケージソフトウェアがパッチを提供しているので、それを適用しようと思いました。そこでインストラクションを読んでいるのですが、その中に「UTF-8ベースのデータベースを使っている場合は」というような記述があります。そこで初めて文字コードというものを意識し、自分の構築したSQLServer2005の文字コードを調べたいと思いました。私の知識は古くはUNIX系がEUC、Windows系がShift-JISで最近はUnicode(UTF-8方式)が主流?、という程度です。ウェブで調べたところどうもUTF-8にするには?テーブルの型をnvarcharなど「N」を付して作成しなければならないというようなことがわかりました。このアプリが使用するテーブル群はすべてパッケージが提供するSQLのスクリプトで作成したものですが、nvarcharでなくvarcharになっていました。ということは、UTF-8ではないということでしょうか?そもそも文字コードというのはテーブルのコラム単位なのでしょうか、それともデータベースとかもっと上位の単位なのでしょうか?SQLServer Management Studio Express上でデータベースなどいろいろな個所を右クリックしてプロパティを見ていますが特にUTF-8とかUnicodeといった記述は見つかりませんでした。このデータベースは何という文字コードなのでしょうか?調べ方をご存じの方、ご教示願います。よろしくお願いします。

  • phpMyAdminの文字コード

    いつもお世話になっております。 phpMyAdminで機種依存文字が文字化けを起こします。 以前、機種依存文字について質問をさせていただきましたが その時とは別のサーバで別のシステムを開発しております。 <以前> *phpMyAdminから直接機種依存文字を入力→OK *EUCのフォームから機種依存文字を入力し、データベースに格納→OK <今回> *phpMyAdminから直接機種依存文字を入力→NG *EUCのフォームから機種依存文字を入力し、データベースに格納→NG コマンドでMySQLの文字コードを調べましたら、以下のように返ってきましたので、文字コードはEUCになっていると思っております。 show create database データベース名; | データベース名 | CREATE DATABASE `データベース名` /*!40100 DEFAULT CHARACTER SET ujis */ | また、1つUTF-8のテーブルを作成して、確認してみましたら *phpMyAdminから直接機種依存文字を入力→OK でした。 何をどのように変更したらいいのか、確認するためには何が必要なのか など、皆さまアドバイスをよろしくお願いいたします。

    • 締切済み
    • PHP
  • 文字コードに関することです

    こんばんは。 社会人1年目でSEをやっております。 来週文字コードについて、発表することになっています。 発表内容として 文字コードの種類としてsjis.unicode.EUCなどがあり、これらの文字コードについて説明します。 しかし、どの程度のレベルまで説明すればいいのか悩んでいます。 私の考えとしては、unicodeを例にあげさせていただきますが、 unicodeとは、世界の言語を1文字2バイトを用いて表現できる文字コードです。unicodeの中でも大きく分けて2種類utf-8、utf-16に分けられます。 次に各utfの詳細な説明に入ります。 こんな具合にそれぞれの文字コードについて、説明していってもよろしいですか?? あと、utf-8がなぜ必要になったのか、教えていただけますでしょうか?? よろしくお願いします。

  • TeraPadの文字コード

    TeraPadの文字コードについて教えてください。 1. TeraPadで扱える文字コードは Shift-JIS、JIS、EUC、Unicode、UTF-8、UTF-8N の6種類あるようですが、このEUCとEUC-JPは 同じものですか? 2. Shift-JISで保存すると、TeraPadの下の部分に 表示される文字コードがSJISとなります。 これはShift-JISのことですか? 3. 短い文章では文字コードを誤認識する場合も あるようですが、どうしたら正しく認識 させられますか? 指定した文字コードで保存できず困っています。

  • データベース:主キーが文字列の場合IDを振るべき?

    テーブルの主キーが文字列の場合、 その主キーの文字列を通し番号に置き換えて、 その文字列は別テーブルに移したほうが検索が速いですか? 例えば、テーブルが CREATE TABLE spec ( test_name VARCHAR(40) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); で、40文字という長いテスト項目名の場合、 CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(40) NOT NULL, PRIMARY KEY(test_id) ); という二つのテーブルに分けたほうが検索は速くなりますか? (もちろん、結合する時間も含めてです。) もし速くなるとしても、文字数が3文字など少ない場合は 通し番号に置き換えてもきっと効果は薄いですよね? 何文字以上の文字列なら通し番号に置き換えたほうが速いですか? 皆さんはどのように決めていますか?

  • mysqlのデータベースの文字コードの変換について

    mysqlのデータベースの文字コードの変換について教えてください。 テストサーバー環境で誤って文字コードUTF-8のデータベースを作成し、文字コードEUC-JPのデータを投入してしまいました。 それでもテストサーバー環境では文字化けせずにウェブアプリを表示できていましたが、テストサーバーのデータをエクスポートすると、テキストエディタで開いた時点で文字化けしています。 (文字コードはUTF-8、EUC-JPのいずれでも) もちろんそのデータを本番サーバーにインポートしても文字化けしてしまいます。 (データベース文字コードはUTF-8、EUC-JPのいずれでも) テストサーバーからデータをエクスポートする前に文字コードを変換することは可能でしょうか? もしくは他に問題を解決する方法はありますでしょうか? ご存知の方がいらっしゃいましたら教えてください。

    • ベストアンサー
    • MySQL
  • データベース:二つのテーブルの繋ぎ方

    私(あなた)が検査担当者だとします。 そして、測定担当者から CREATE TABLE measurement ( lot VARCHAR(10) NOT NULL, test_id INTEGER NOT NULL, data NUMERIC(17,7), PRIMARY KEY(lot, test_id) ); という、あるロットでのテスト番号に対する測定値データが送られてきたとします。 そして、設計担当者から CREATE TABLE spec ( test_name VARCHAR(10) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); という、テスト項目名に対する上限・下限の仕様データが送られてきたとします。 ここで、テスト番号とテスト項目名は同じ数だけあって、お互いが一致するように同じ順番で並んでいるとします。 この二つのテーブルを使って、測定値が範囲内か範囲外かを調べるのが目的です。 この場合、どうやって二つのテーブルを繋ぐのが一般的ですか? 自分の考えだと、一旦、specテーブルにtest_idを加えて CREATE TABLE spec ( test_id INTEGER NOT NULL, test_name VARCHAR(10) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id, test_name) ); とするのですが、第二(第三?)正規化に基づいて CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(10), PRIMARY KEY(test_id) ); の二つに分けるのかな、と思っています。 正規化の観点から言うと、きっとこれが正しいのかなと思っています。 でも、元々、specテーブルにはテスト項目名が入っていたのでテスト項目名と上限・下限が一目で分かっていたのに、このように分けると、いちいちspecテーブルでテスト番号を確認してから、testテーブルでそのテスト番号に該当するテスト項目名を見つけなくてはならなくなってしまいます。クエリーでの検索もJOINをしなければならなくなって遅くなりませんか? 敢えて正規化しないでおく、なんて手段もありますか? こんな場合、皆さんならどうしますか? 「こうするように決められている」なのか、 「ああもできるし、こうもできるんですが、どっちでもいいですよ」なのか、 温度差みたいなものもできれば知りたいです。

  • 文字コードの指定について

    METAタグで文字コードを指定する際、指定する文字コードは使っているレンタルサーバーによるのでしょうか? 今は、charset=x-euc-jp"と指定していて、問題なく表示されていますが、 これは私の使っているレンタルサーバーの文字コードが たまたまx-euc-jpだったのでしょうか?

    • ベストアンサー
    • HTML
  • MySQLでのテーブル作成

    MySQLでこういったテーブルを作成したのですが、 CREATE TABLE NOSGI ( GNRE_CD CHAR(5) NOT NULL, GNRE_NAME VARCHAR(20) NOT NULL, PRIMARY KEY (GNRE_CD) ); GNRE_CDはCHAR型で作成したのに、カラムの情報を見ると、 VARCHAR型にしまうのですが、どうしてでしょうか?