• 締切済み

SET NAMES utf8 で汎用性が犠牲になる?

PHP + MySQL + UTF-8 のアプリケーションでよくある文字化け ?????????????? を防ぐため、接続直後に SET NAMES utf8 をするという対策がありますが、「接続するたびに SET NAMES utf8 するので、汎用性が失われる」と嫌う声がよく聞こえます。 むしろ、接続するたびに必ず SET NAMES utf8 することになるのだから我としては汎用性は失われないと思いますが、そうでないとしたら彼のいう「汎用性」とは何を指しているのでしょうか。 もう一点。同じ組み合わせでも ?????????????? とならない場合もあるのですから、それに倣えばよいのに、彼が嫌う SET NAMES utf8 を使うのはなぜでしょうか。

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

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

私も「汎用性が失われる」という意図がわかりません(汗 無条件で「set names」を出力する書き方であれば、たしかに汎用性は失われる(MySQL4.0系もまだ稼動中)とは思いますが、そういうことはしないですね。接続直後に「set names」を挿入するかどうかを設定ファイルに持ちます。どうせ接続のための文字列は持たないといけないので、それと同じですね。項目が増えただけです。

username
質問者

お礼

ありがとうございます。 質問数制限のため、閉じさせていただきます。

username
質問者

補足

ありがとうございます。 存否も含め、他のご意見も聞いてみたいので、もう少しインキュベートします。

関連するQ&A

  • SET NAMES utf8 はなぜ必要なんでしょうか?

    データベースもテーブルも、スクリプトもUTF8なのに、わざわざ、「SET NAMES utf8;」としないと文字化けするのは、なぜでしょうか? この、SET NAMES utf8; は、コネクトする度に必要になるのでしょうか?

    • ベストアンサー
    • MySQL
  • 「set names utf8」ですよね?

    「set names utf-8」は、「set names utf8」ですよね? MySQLの文字化けの質問の回答に「set names utf-8」 と教えているページがありました。 http://okwave.jp/qa/q3749280.html 「set names utf8」ですよね? 「set names utf-8」で解決するのでしょうか? 質問が閉じていたので質問させていただきます。

    • ベストアンサー
    • MySQL
  • set names utf-8を記述する場所を教えてください。

    どなたかご教授頂きたいのですが、 フォームに入力した文字をデータベースに書き込むプログラムを 作りました。データの書き込みは成功するのですが、 漢字が文字化けします。 いろいろと調べたところ set names utf-8 を記述するという事で 解決するという事はわかったのですが、 $sql = 'set names utf-8'; mysql_query($sql); この文字を記述するとエラーになり、前に進めない状態です。 いろいろな場所や方法を変えて記述しましたが、さまざまなエラーが でる状態ですので、書き込みができるプログラムだけ掲載いたしました。 どこに set names utf-8 を記述するのか、下にある プログラムに正しい書き加え方を教えて頂けないでしょうか。 よろしくお願い致します。 ///////////////////////////////// xyz.php <?php function executeQuery($sql){ $url = "xxx"; $user = "xxx"; $pass = "xxx";   $dbname = "xxx"; $db = "xxx"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($dbname,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $result = mysql_query($sql,$link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); //戻り値 return($result); } ?> ///////////////////////////////////////////////////// //ファイルを読み込む require_once("xyz.php"); //データを取得する $prefCd = $_POST['cd']; $prefName = $_POST['name']; $aff = $_POST['no']; $plname = $_POST['lname']; $pfname = $_POST['fname']; $pzip1 = $_POST['zip1']; $pzip2 = $_POST['zip2']; $ppref = $_POST['prefecture']; $pcity = $_POST['city']; $pstreet = $_POST['street']; $ptel1 = $_POST['tel1']; $ptel2 = $_POST['tel2']; $ptel3= $_POST['tel3']; $pcdemail = $_POST['cdemail']; $pconfirm_email = $_POST['confirm_email']; $piru = $_POST['iru']; $sql = "INSERT INTO table_name VALUES('$prefCd', '$prefName', '$aff', '$plname', '$pfname', '$pzip1', '$pzip2', '$ppref', '$pcity', '$pstreet', '$ptel1', '$ptel2', '$ptel3', '$pcdemail', '$pconfirm_email', '$piru')"; $result = executeQuery($sql);

    • ベストアンサー
    • PHP
  • my.iniとSET NAMES

    my.iniとSET NAMES SJIS  について教えていただきたいことがあります。 my.iniに以下設定を追加で行いました。  [mysqld]  character-set-server=utf8  [mysqldump]  default-character-set = utf8  [mysql]  default-character-set = utf8 データベースのAテーブルには、 No  商品    価格 1   冷蔵庫  1000 2   エアコン  800 というレコードが入っております。 コマンドプロンプトより、 1. cd C:\xampp\mysql\bin 2. mysql -u root -pnazonazo の二つのコマンドを実行後、 mysql> Select * from A; を実行したところ、日本語の商品列が文字化けしました。  No  商品    価格  1   文字化け 1000  2   文字化け  800 そこで、色々調べて 1. mysql> SET NAMES SJIS; 2. mysql> Select * from A; を実行したところ商品名の文字化けが直って表示されました。  No  商品    価格  1   冷蔵庫  1000  2   エアコン  800 質問1:SET NAMES SJIS;により、コマンドプロンプトでの文字化け原因が 解消されたと思うのですが、なぜだか理由が分からないのです。 「my.ini」とどのような関係があるのでしょうか。 情報を見つけたページでは、おまじないということで書かれていたのですが 解決された理由を知りたいのです。 質問2:PHPでも、SET NAMES SJIS; を使用するときがあるみたいなのですが 同じ効果があるのでしょうか。 どなたかお分かりのかたがいらっしゃいましたら ご教授お願いします。

    • ベストアンサー
    • MySQL
  • MySQL4.0 UTF-8 での文字化け

    こんにちは MySQL4.0 & PHP4.3 でHTMLは文字コードUTF-8で記述しています。 MySQL4.0の文字コード設定はレンタルサーバーのため不明ですが、 phpMyAdminで、utf-8にてデータを入力しました。 select文でMySQLのデータを拾ってくると文字化けはおきないのですが PHP経由でPOSTされた値を使ってinsertやupdateをかけると文字化けしてしまいます。phpMyAdmin上でも文字化けしていますが、phpMyAdminをEUC-JPにすると、入力した文字が文字化けせずに表示されます。 (が、すでに入っているデータは文字化けします、、、、) 入力画面は metaでUTF-8宣言をしており、ブラウザ(IE)上でエンコードを確認するとUnicode(UTF-8)になっています。4.1みたいにset names を指定するとうまくいくかな?と思ったのですが、やっぱり4.0なので結果は変わらず、でした。PHPのスクリプトそのものは、UTF-8で記述しているのですが、、、、 どういった項目をみなおせばいいのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQL(UTF-8)で ~ が文字化けしてしまう

    いろいろと検索などして探してみたのですが、情報が得られず困っております。お分かりの方おられましたらご教示いただけると幸いです。 環境 Apache 2059 PHP 5.1.6 MySQL 5.0.24a WindowsXP SP2 PHPソース すべてUTF8書いてます。 HTML出力もヘッダーでUTF-8で表示しています。 my.cnfでは すべて default-character-set=utf8 で統一しています。 さらに、PHPからMySQLに接続したときに set names utf8; もしてます。 この環境で、 ~ のみが文字化けしてしまいます。 たとえば、 "あ~あ" とINSERTすると SELECTしてみると "あ?あ" となってしまいます。 ~以外の文字は問題ありません。 またPHP上で発行クエリ文を表示させると、まだ~となっているので、MySQL側の問題だとは思っているのですが、どう設定すればよいかわからないところです。 MySQL Query Browzerからでも同様になってしまいます。 ご存知の方おられましたら、情報よろしくお願いします。

    • ベストアンサー
    • MySQL
  • My SQL の文字化け

    PHPを使用してMySQLからデータの読み出しで”?????”文字化けが発生します。 データベースでは問題なく日本語が入っているのですが、表示させたいページでは mysql_query("SET NAMES , 'utf8'"); と <?php echo mb_convert_encoding(SET NAMES ,'UTF-8');?> としたのですが文字化けのままです。 同じような事例も結構あるようで、いろいろ調べて試して見たいのですが原因がわかりません。 http://netlog.jpn.org/r271-635/2008/05/php_mysql_utf8.html よろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • UTF8のPHPコードから日本語をINSERTするとphpMyAdmin上で文字化けしてしまう

    ・WindowsXP(SP2)IIS5.1 ・PHP 5.2.5 Win32 ・MySQL 5.1.22 RC Win32 ・phpMyAdmin 2.11.4 多言語(日本語と中国語)を扱える簡単なシステムを試作しているのですが、 test1.php(UFT8-BOM無し)からINSERTしたレコードをphpMyAdminから閲覧 すると日本語が「&egrave;&sup2;&iexcl;&aring;›&pound;&aelig;&sup3;•&auml;&ordm;&ordm;&aelig;」などと文字化けしまくっています。 test2.phpからSELECTすると、まったく文字化けなく呼び出せます。 また、phpMyAdminから直接INSERTしたレコードば文字化けしません。 当初、MySQL4.1.22-win32や、phpMyAdmin 2.8.2.4だったので、 冒頭の最新バージョンにしたりもしてみましたがだめでした。 過去ログや、Webで昨日さんざん調べてみて、確認したのは以下の設定です。 (1) C:\Program Files\MySQL\MySQL Server 5.1\my.ini: [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 (2) C:\Inetpub\wwwroot\phpMyAdmin\libraries\config.default.php $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $cfg['DefaultCharset'] = 'utf-8'; (3) MySQL Server Instance Config Wizard UTF8を選択しました(MySQL の文字セット: UTF-8 Unicode (utf8)) MySQL 接続照合順序 utf8_general_ci

    • ベストアンサー
    • PHP
  • mySQL 4.0で文字化け

    はじめまして、PHP+mySQLでプログラムを勉強中の初心者です。 PHPからインサートした日本語データをphpmyadminで確認するとデータが化けています。SQL文自体をPHPで表示させると文字化けせずにちゃんと表示されます。  mySQL 4.1以降なら SET NAMESというコマンドをDB接続後に入れることで問題が回避できると言うことですが、mySQL 4.0ではコマンドエラーになってしまいます。 レンタルサーバーなので、PHPのアプリケーション側で対応できたらと考えています。 何かよい方法がないでしょうか? PHP 4.3.11は mySQL 4.0.27です。 PHPのキャラクターはutf-8, mySQLのCharactersetは latin1となっていました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL 文字化けについて(PHP)

    いつもお世話になっております。 PHPを使用してMySQLからデータを出し入れする際に文字化けが発生し原因がわからず、大変困っております。 MySQL 4.1.18(クライアント 4.1.21) MySQL文字セット UTF-8 Unicode (utf8) 様々なHPを検索して、下記のような一文を入れれば大丈夫と思ったのですが、それでも文字化けは改善されませんでした。 mysql_query("SET NAMES ujis"); 上記文はmysql_connectの直後に記述しております。 INSERT文、SELECT文どちらに不備があるのかわかりません。 ご教授お願い致します。 記述プログラム:(INSERT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "insert into T_YOYAKU values ('1','A','1','あいうえお')"; mysql_query($sql) 省略・・・ 記述プログラム:(SELECT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "select * from T_YOYAKU"; if ( $rs = mysql_query($sql) ) {

    • ベストアンサー
    • MySQL