• 締切済み

MySQLの日本語の扱い

MySQLデータベースにデータを書き込みする場合に「構」や「表」等 SJISコードの2バイト目が5Cの文字を書き込みするとエラーになってしまいます。回避する方法はありますか?(MYSQLのキャラクタセットはCP932を使用しています)よろしくお願いします。

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

みんなの回答

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

どういう状況で「データを書き込み」してるのかによって対応が違いますけど? 1.windowsコマンドライン上では、SJISしか使えないから それらの文字のうしろに \ というエスケープ文字をいれましょう。 2.phpやperlなどのプログラムから実行なら、SJISを使わずに、eucやutf8などに変換してからデータベースにいれましょう。 いずれにしても、特殊文字のエスケープは必要になります。でも、sjisでの必要性は半端じゃないから。

関連するQ&A

  • MySQLで日本語の文字化け

    お世話になります。 LibreOfficeで作成した日本語のデータ(カラオケの曲が記憶されているパスです)をMySQLのテーブルに移植しましたが、プロンプト画面で表示させると文字化けしています。どこが間違っているのかさんざん考えましたがわかりません。 私のしたことは次のようなことです。 ちなみに、使ったコンピューターは英語版のWindows10 64Bitです。MySQLとApatchはXamppー8.03からインストールしたものです。 (1)カラオケの曲のパスを取得するために、曲の入ったハードディスクのディレクトリーを開いて曲を選択し、シフトキーを押しながらマウスを右クリックして"copy as path"を選び、そのパスをLibreOfficeのスプレッドシートに貼り付けました。添付の写真の上のものがその結果です。 (2)このデータをCSV形式で、Japanese(Win932)という文字セットでセーブします。 (3)MariaDBのプロンプトからMySQL(MariaDB)に入り、以下の文字セットをCP932に統一します。 character_set_client character_set_connection character_set_results (4)同じくプロンプトからデータベースの文字セットを設定します。    alter table table-name character set cp932 collate cp932_general_ci (5)いったんMariaDBから出て、chcp 932 を実行しておきます。 (6)MariaDBに戻ってcsvデータをテーブルに移植します。 MariaDB [karaoke]> load data infile "C:/xampp-backup/htdocs/karaoke/KARAOKE-all-path.csv" into table originalpath fields terminated by ',' lines terminated by '\r\n'; (7)そして移植したデータを見たのが添付写真の下のものです。 一貫して文字コードはCP932で設定してきたのに、なぜちゃんと表示されないのでしょうか? 詳しい方、どうか詳しく教えて頂けると有難く思います。

    • ベストアンサー
    • MySQL
  • PHPからmysqlへのデータの追加について

    いつもお世話になります。 昨日自宅のパソコンでPHPからmysqlへINSERT INTO でデータの追加が出来たのですが今日は会社のパソコンでテストをしたら クエリの送信に失敗しましたのエラーが出ました。いろいろ調べたら日本語入力するとエラーになります。半角英数だとうまく送信できました。 原因はおそらく文字コードの問題と思うのですがやはり show variables like 'character%'; でコマンドブロンブスに入力したら SET character_set_client = Utf8; になっていました。 この前質問したときに set names cp932; にすれば直ります。とのことで set names cp932;にしたのですが SET character_set_client = cp932; になったけど やはりPHPからmysqlにデータを送ると クエリの送信に失敗しました。 になります。おまけにコマンドブロンブスを停止して再起動するとまたもとの設定になります。 my.iniの設定も default-character-set=sjis にしています。 家のパソコンではうまく送信できたのでプログラムには問題ないと思います。 アドバイスお願いします。

    • ベストアンサー
    • MySQL
  • MYSQLの文字化けについて

    すみません。いまMYSQLでデータベースを構築しているのですが、秀丸で作成した、insert文をコマンドで走らせると 「ERROR 1366 (HY000): Incorrect string value: '\x87u \x82T\x82...' for column 'menseki' at row 1」というエラーが出てしまいます。 表の中身は日本語ですので、秀丸のinsert文がおかしいのかと思い、コマンドで直接打っても同じエラーが出ます。 my.iniやコマンドで「set names sjis;」を打ってみるなど文字コードなどをいろいろいじってみましたが直りません。ちなみに現在の文字設定は、show variables like '%char%';を走らせると +--------------------------+------------------------------+ | Variable_name | Value | +--------------------------+------------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 | | character_sets_dir | C:\MYSQL\share\charsets\ +--------------------------+------------------------------+ になります。 どなたかわかる方いましたらご教授ください。 使用環境 OS:winXP mysql5.0.45 php5.25 apache2.26 です。よろしくお願いします。

  • MySQL 4.1.10a で日本語入力できない

    以下の環境でPHPとMySQLを使おうと思っているのですが、MySQLのコンソール画面で日本語を入力しようとしても、日本語が表示もされずに消えてしまいます。 mysql> select * from table where data='日本語 ↑ここでエンターを押すと mysql> select * from table where data=' ↑こうなります 過去にも似たような事例は見かけるのですが、参考にして対処しても改善されません。どうしたらよいのでしょうか、すみませんが教えてください。 <以下は環境など> ・FedoraCore2 ・Apache2 ・PHP5.0.4 ・MySQL4.1.10a ■設定ファイル /etc/my.cnf [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis [mysql] default-character-set = ujis ■起動方法 /usr/local/mysql/bin/mysqld_safe --default-character-set=ujis & ■SHOW CHARACTER SET 以下のように表示されすので、文字コードは入っているように思えるのですが、 どうやって使用すればよいのでしょうか。 mysql> SHOW CHARACTER SET …略… | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | …略… ■Linuxの日本語環境 /etc/sysconfig/i18n LANG="ja_JP.eucJP" SUPPORTED="ja_jp.eucJP:ja_JP:ja"

  • phpからMySQLへの日本語文字化けについて

    phpからMySQLへの日本語文字化けについて こんにちは。お分かりの方は教えてください。 現在、「ハッスルサーバー」を利用しwebのphpからMySQLサーバーへの 情報登録画面を作成しています。 登録内容で数値やメールアドレスなどの「1バイト文字」ですと 問題ないのですが、日本語の「2バイト文字」ですと文字化けが 発生してしまいます。 phpやMySQLに知識が無いため色々と調べて試したのですが 正しく登録できませんでした。 試した結果とサーバー/DBの状況は以下の通りです。 ※サーバー/DB ・バージョン:5.0.90-log ・文字セット:UTF-8 Unicode (utf8) ・接続照合順序:utf8_general_ci ・種別:MyISAM ・Variable_name:Value ・character_set_client:utf8 ・character_set_connection:utf8 ・character_set_database:utf8 ・character_set_filesystem:binary ・character_set_results:utf8 ・character_set_server:utf8 ・character_set_system:utf8 ・character_sets_dir:/usr/local/share/mysql/charsets/ ※phpファイルにて試した設定 //接続 $objCon = mysql_connect(C_SERVER, C_USER, C_PASSWORD); //文字コード // mysql_query("SET NAMES SJIS"); ←文字コードを左の2パターンで // mysql_query("SET NAMES UTF8"); ←どちらかに切り替えて実行しました。 //データベース $objSecDB = mysql_select_db(C_DB_NAME); //**********SQL(Insert)**********// $strSql = ""; $strSql = $strSql . "Insert Into XXXXX "; $strSql = $strSql . "("; $strSql = $strSql . "KeyNo,"; $strSql = $strSql . "E_Mail,"; $strSql = $strSql . "Title"; $strSql = $strSql . ") "; $strSql = $strSql . "Values "; $strSql = $strSql . "("; $strSql = $strSql . " " . mysql_real_escape_string($intKeyNo) . ", "; //KeyNo $strSql = $strSql . " " . mysql_real_escape_string($strEmail) . ", "; //E_Mail $strSql = $strSql . "'" . mysql_real_escape_string($strTitle) . "' "; //Title $strSql = $strSql . ")"; //SQL発行 $blnRet = mysql_query($strSql); ・上記のソース内に記しましたが文字コードを2パターン切り替えて  実行しましたが文字化けや空文字が登録されました。 どなたか対処方法をお分かりの方はお教えください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL4.1 文字コードについて

    MySQL4.1を導入したのですが一部文字が入力できないときがあります。 MySQL4.0の時は不具合はおきませんでした。 MySQLのキャラクタセットはすべてsjisに設定しました。 character_set_client sjis character_set_connection sjis character_set_database sjis character_set_results sjis character_set_server sjis character_set_system utf8 MySQL・phpでサイトを構築しているのですが 入力フォームで文章が「ソ」「表」で終わると、登録に失敗します。 shift-jisの特殊文字ですので「ソ\」「表\」のようになり、SQL文のシングルコーテーションが文字列(\')と認識されると思うので下記置き換えで大丈夫かと思いましたが、また失敗しました。 $text = str_replace("\\","\\\\",$text); $text = str_replace("'","\'",$text); MySQL4.1はホントに難しいです… お分かりになる方いましたらよろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLデータベースリカバリ文字コード指定

    Windows環境でのMySQLのデータベースバックアップで、以下のように文字コードを指定してバックアップが行われています。 mysqldump -uユーザ名 -pパスワード --default-character-set=sjis データベース名 > ****.sql バックアップからリストアするのですが、同じサーバ上で既存の同じデータベース(名)があるので 一度DROP DATABASE データベース名;してからCREATE DATABASE データベース名;を行うつもりです。 以下の2点について教えてください。 (1)create databaseする際に文字コードを指定する必要がありますでしょうか? create database データベース名 CHARACTER SET sjis; (2)リストア実行時に文字コードを指定する必要がありますでしょうか? mysqldump -uユーザ名 -pパスワード --default-character-set=sjis データベース名 < ****.sql 因みに ※my.iniには文字コードの指定で、sjis指定の表記がありました。 ※Moveble TypeでMySQLをデータベースとして使用しています。  よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlでエラーが出ます。

    環境は Windows7 mysqlはmysql-5.5.8-win32.msi です。 データベースを作成しテーブルも作成しています。 INSERT INTO でテーブルにレコードを追加しようとすると日本語が追加できません。 このようなエラーがでます。 MySQL]ERROR 1366 (HY000): Incorrect string value 僕なりにいろいろ調べて 文字コードの設定も my.iniないの設定も #default-character-set=utf8 default-character-set=sjis に変更もしました。 しかし コマンドブロンブスで show variables like '%char%'; で確認したらやはり character_setがすべてutf8になっていて日本語が入力できません。 対処法を教えてください。

    • ベストアンサー
    • MySQL
  • PHP+MySQL エンコード

    文字コードについて教えて下さい。 データベースMySQL の文字セット: UTF-8 Unicode (utf8)に固定。 htmlはSIFT-JISで表示。 フォームで受けとったデータをPHPからDBに書き込む場合 i18n_convert($data,"UTF-8", "SJIS"); をして書き込めば問題ないでしょうか? DBがEUCの場合は問題なかったのですが、UTF-8は初めて 扱うため、文字化けの不安があります。 いまいち、文字コード(バイト数の違いなど)が理解できておりません。 ご教授お願い致します。

    • 締切済み
    • PHP
  • MySQLで日本語が化けてしまいます。

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

    • ベストアンサー
    • MySQL