MySQL version 5.0.51とcseのデータ登録の問題について

このQ&Aのポイント
  • MySQL version 5.0.51とcseのデータ登録時に、varchar(32)の項目に「あいうえおかきくけこ」を入力しようとすると、8文字しか登録されない現象が発生しています。
  • cseの文字コード設定により、1文字が4バイトで認識され、MySQLの文字コード設定であるUTF8では1文字が3バイトで扱われているため、文字数制限が発生している可能性があります。
  • Oracleではvarchar(X)でXバイトとなり、MySQLではvarchar(X)でX文字となるため、MySQLの場合、32文字登録可能なはずなのに8文字しか登録されない状況となっています。
回答を見る
  • ベストアンサー

MySQL version 5.0.51とcseついて。

MySQL version 5.0.51とcseついて。 cseというフリーのデータベース接続ツールを使用してMySQLに接続しているのですが、 その際、varchar(32)という項目に「あいうえおかきくけこ」を入力しようとすると 「あいうえおかきく」までしか登録されません。 データベースの文字コードはUTF8を設定しているので全角1文字3バイトだと思うのですが cseだと1文字4バイトで認識されているのでしょうか? この事象を調べている最中に、Oracleではvarchar(X)でXバイトだが、 MySQLだとX文字という記述を見つけ、そうだとしたら32文字登録可能なのに 8文字しか登録されない?? と迷走しております。どなたかご存知の方ご回答いただければ幸いです。

  • MySQL
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
回答No.1

cseって、もうサポートも終わってて、動作保証もされていないと思いますが。。。 ODBC接続しているのですよね? ODBCはどのバージョンのものを使っているのでしょうかね?設定で、set namesを投げるようにしてますか? 接続後、 show variables like '%char%' で、有効になっている文字コードをまず確認してください。 また、 show create table 表名 で、意図した表定義になっているか、特に文字コードを確認してください。 >Oracleではvarchar(X)でXバイトだが、MySQLだとX文字という記述を見つけ varchar(x) の x は、MySQL 4.1より前では「バイト数」でした。MySQL 4.1からは「文字数」です。 この辺は、MySQLユーザ会のFAQが参考になるでしょう。 http://www.mysql.gr.jp/ ちなみに、cseでは 「古いバージョンの日本語サーバー対応版 libmysql.dll を使ってMySQLに接続できるようにしていた」 ものが、MySQL 5.0でのユーザ認証方法(パスワードの形式変更?)があり、ODBC接続するしかなくなった ような記憶があります。ともかく、もうサポートされておらず、MySQL 5.0での動作保証はされていません。

wheather21
質問者

お礼

>varchar(x) の x は、MySQL 4.1より前では「バイト数」でした。MySQL 4.1からは「文字数」です。 >ような記憶があります。ともかく、もうサポートされておらず、MySQL 5.0での動作保証はされていません。 ありがとうございました。 なるほど、5.X環境なので文字数になるし、それで上手く動かないのはやはりCSEが対応してないからなんでしょうかね。 ちなみに文字コードはUTF8でした。

関連するQ&A

  • VBの文字の途中に "

    お世話になります、今年もよろしくお願いします。 VB6.0です。 a = "あいうえおかきく" これは普通ですが、、 a = "あい"うえおか"きく" 「あい"うえおか"きく」     ↑この文字をaに入れる場合     "は終わりを表してしまって文字として認識してくれません。 あい"うえおか"きく を入れる場合はどうすればよいでしょうか?

  • MySQL4.1以上でのchar,varcharの定義について

    環境はWindowsXP + MySQL5.0です。 MySQL5.0でテーブルを作成したところ、varchar(10)の列に入力可能なデータは『10バイト分』でななく『10文字分』でした。 (「1234567890」や「abcdefghij」に加え、「あいうえおかきくけこ」も入力可能だった) 従来(?)の『varchar(10) = 10バイト分入力可能』で定義したいのですが、なにか方法はないでしょうか? (「1234567890」や「あいうえお」は入力可能だが、「あいうえお1」は入力不可にしたい) http://www.mysql.gr.jp/frame/modules/bwiki/index.php?FAQ#u0cc977e ↑こちらのページによると、MySQL4.1からこのような仕様になったようですが、MySQLのバージョンは5.0のままでなにか方法はないものかと探しております。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql_queryは最大いくつまで登録できるのでしょうか。

    いつもお世話になっております。 またまた詰まってしまいました。 mysql_query関数で、30程度のデータをひとつのレコードとしてデータベースに登録しようとしているのですが、どうしても登録に失敗してしまいます。 データベース、テーブルはphpMyAdminで作成しました。 id(auto_increment:主キー),a(varchar(20)),b(aと同様),c・・・,z(varchar(20))とします。 $sql="INSERT INTO table(a,b,・・・z) VALUES('$a','$b',・・・'$z'); mysql_query($sql,$conn); と、しています。$connには問題ありません。一応、すべて文字列を登録しようとしています。(数字もありますが、文字列としています) ためしに簡単なデータベース、テーブルを作成し、実行してみるとうまくいきました。 何が悪いのでしょうか・・・(変な質問になってしまいまして、すみません。)

    • ベストアンサー
    • PHP
  • MySQLで日本語が化けてしまいます。

    yahooの知恵袋で聞いたのですが、こちらのがよいと聞いたのでこちらに質問させていただきます。 今MYSQLをつかって卒業研究をしています。JAVAから日本語のデータをデータベースに登録するのですが、2バイト文字であるとどうしても化けてしまいます。MYSQLで2バイト文字をつかうことは無理なのでしょうか。参考書を見たところ、漢字をつかっているのでつかうことはできると思うのですが、どうしたら使えるのでしょうか? 過去の質問で『Mysqlで文字化けします』と言うものが合ったので参考にして回答された方法を試したのですが依然文字化けしてしまいます。

    • ベストアンサー
    • MySQL
  • mysql

    疑問があります。mysqlサーバーとmysqlクライアントとはなんですか? mysqlクライアントとはmysqlに接続するroot以外のユーザーのことを指すのでしょうか?サーバーはそのまんまサーバーのことですよね?? それと文字化け対策にmy.iniに skip-character-set-client-handshake と記述して解決できたのですが、これはサーバー側の文字コードをutf-8に設定しておけば、データベースの登録・参照などを必要として接続してくるユーザーの文字コードを無視してutf-8にしちゃうよっていうことなのでしょうか?

  • cseデータ閲覧時に文字化け

    cseからodbc経由でmysqlに接続しています。 select文発行時の結果が、全角の文字データが??で表示され、正しく見ることができません。 また、cseから以下のようなsqlを発行するとエラーが発生してしまいます。 insert into myaddress values('168-0063','ああ',current_timestamp(),now(),current_date(),1234567,125) エラーメッセージ SQL実行中に以下のエラーが発生しました。 エラーコード:1366 [MySQL][ODBC 3.51 Driver][mysqld-5.0.37-community-nt]Incorrect string value: '\x82\xA0\x82\xA0' for column 'address' at row 1 SQLステータス:S1000 mysqlのプロンプトでデータを見ると全角文字列は文字化けすることなく 表示されます。 解決方法が解らず困っています。 ご存知の方がいらっしゃいましたら、宜しくお願いします。 動作環境は以下です。 wincse: ver 1.59 mysql :5.0.37 myodbc:3.51

  • MySQL5.1で varchar(100)のものを varchar(

    MySQL5.1で varchar(100)のものを varchar(90)にする予定です。 (後ろの10バイトは無条件になくなっても構いません) 通常の手順ではalter tableを使います。 今回は、他の項目も変更(auto_incrementやキーの追加)するので 一度 mysqldumpでSQLを吐き出して、 CREATE文の以下を変更 varchar(100) → varchar(90) auto_incrementやキーの追加 そして、mysqlでリストアします。 この方法は、アリでしょうか? 他のデータベース(PostgreSQL, SQLServer, Oracle)でも使える手法でしょうか? 皆さんのvarchar(100) → varchar(90)する方法が知りたいです。

    • ベストアンサー
    • MySQL
  • MySQLのvarcharについて

    今までPostgreSQLを利用していたのですが、MySQLもテストで一回使ってみよと思い触ってみたところ・・・ varchar(20)のカラムに、文字列型で「4571170731101」という値を登録するとDB上では「2147483647」となってしまいます。 int型?とかに解釈されてるんでしょうか。意味がわかりません。 どなたか助けてください。

    • ベストアンサー
    • MySQL
  • MySQLのvarchar型とtext型について

    以下のURLのページを読んだのですがよく理解できません。。。 http://dev.mysql.com/doc/refman/4.1/ja/storage-requirements.html http://dev.mysql.com/doc/refman/4.1/ja/blob.html 例えば'abc'という文字列を格納するとした場合、記憶容量は varchar型では3+1バイト、text型では3+2バイトとなるようですが、 1バイト(varchar)と2バイト(text)の違い以外で、 text型の方がDBに負担がかかるとか不利になるようなことはありますか? text型では格納する文字列の長さに関係無く、65535バイトを常に確保しているとか… text型の方が動作が遅いとか… 現状、255バイト以下を想定しているのでvarchar(255)にするつもりですが、 将来的に256バイト以上となることもありえるので 最初からtext型にしていた方がいいのでしょうか? また、将来text型に変更した際にパフォーマンスが落ちる等といったことがありえるのでしょうか? 宜しくお願い致します。

  • MySQLが文字化けしてしまう

    MySQLが文字化けしてしまう 現在、PHPとMYSQLを使ってデーターベースに画像をアップするプログラムを作っています。 http://websegment.net/2010/09/05/php-mysql-blob/ のサイトのプログラムでまず作成してみたところデーターベースへの 登録はうまくいったのですが、ターミナルでテーブルを確認したところ文字化けしていました。 フィールドのfile、size辺りで文字化けしてしまっているようです。 どうすれば、文字化けが直るのでしょうか? 教えてください。

    • ベストアンサー
    • PHP