• 締切済み

MySQLのストアドプロシージャーでの引数に日本語が使えますか

utakataXEXの回答

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

調べる時間があるなら、サンプルをサクッと作って試してみた方が早いと思います。 結論から言うと、マルチバイト文字をストアドの引数にする事自体は問題ありません。 (当方の環境 5.1 で UTF-8) 後は、 ・クライアントOSが何で ・言語が何で ・ミドルウェアが何で によって、可能かどうか変わってくる可能性があります。 すべてUTF-8と言うのが「サーバーOSもクライアントOSも言語もミドルウェアもすべてUTF-8」と言う意味であれば、まず問題無いんじゃないでしょうかね? (仕事でMySQLのストアドの引数にマルチバイトは使った事がないので断言はできかねますけど)

ssdevelop
質問者

お礼

なるほど、分かりました。 ありがとう

ssdevelop
質問者

補足

補足です。 使用言語 PHP Ver5.2 データベースからサーバソフトも全部UTF8に統一して mysqliクラスを使ってストアドプロシージャー呼び出した場合、 日本語の引数の使用で不具合が発生する場合があります。

関連するQ&A

  • MYSQLでストアドプロシージャの引数を二つ

    MYSQL初心者で参考書にかじりついてプログラミングしています。 主にDBの内容をPHPで吐き出させるといった使い方をしています。 SQL文があまりにも長ったらしくなってきたのでストアドプロシージャを使いたいのですが、使っているSQL文が (SELECT * FROM .変数. WHERE .変数. LIKE '.変数.') UNION (SELECT * FROM .変数. WHERE .変数. LIKE '.変数.'); となっており、引数を複数使えないとスッキリさせられない状況です。 ストアドプロシージャで複数の引数を設定することはできないのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLのストアドプロシージャをJavaから使いたい

    MySQLのバージョン5から搭載されたストアドプロシージャをJavaから使いたいと考えています。 また、MySQLのストアドプロシージャの文法自体も知りたいです。 しかしまだWeb上の情報が少なく、困っています。 このような情報の載っているサイトをご存知の方がいたら教えていただきたいです。 (できれば日本語のサイトだとさらにありがたいです) もしくはサンプルを直接記述していただけないでしょうか。 環境は ・WindowsXP ・Java5 ・MySQL5 です。よろしくお願いします。 ちなみに公式サイトのページは知っています。 http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html ので、それ以外でお願いします。

  • MySQL5.0のストアドプロシージャで引数の使い方がわからなくて困っています。

    MySQL5.0のストアドプロシージャで引数の使い方がわからなくて困っています。 ストアドプロシージャで IF文で引数の空の判定と、 LIKE '%name%'にその引数を使いたいのです。 どなたかわかるかたいらっしゃいませんか? □プログラムからコールする strSQL = "CALL buttonaction_proc2(syohinCd, syohinCdLast, name, count) "; □ストアドプロージャ delimiter // CREATE PROCEDURE buttonaction_proc2(IN syohinCd INT(8), IN syohinCdLast INT(8), IN name VARCHAR(40), IN count INT(8)) IF ((syihinCd IS NOT NULL) OR (syohinCdLast IS NOT NULL) OR (name IS NOT NULL)) THEN AND (SYOHIN_CD BETWEEN syohinCd AND syohinCdLast) ELSE (IF syohinCd IS NOT NULL) THEN AND (SYOHIN_CD BETWEEN syohinCd AND count) ELSE IF (syohinCdLast IS NOT NULL) THEN ( AND (SYOHIN_CD BETWEEN 1 AND syohinCdLast) ) IF (name IS NOT NULL) THEN AND NAME LIKE '%name%' END IF END IF ORDER BY SYOHIN_CD; END //

  • ストアドプロシージャの作成

    MySQLでストアドプロシージャを作成しようと試みているのですが、 分からない事があります。 引数に、テーブルのカラムを指定したいんです。 具体的には、 func(column1, 100) などとして、 select * from table where finc func(column1, 100) > 1000 tableのcolumn1には数字が入っていて、引数の100と計算をして、 1000より大きい結果を返す・・・ みたいな感じです。

    • ベストアンサー
    • MySQL
  • MySQLのストアドでファイルを削除

    MySQLのストアド(プロシージャ/ファンクション)でテキストファイルを削除する方法を探しています。 テキストファイルは、他のファイルでも構いません。 テーブルにデータがINSERTされた時に実行されるストアドです。 system rm -f 'ファイル名'; によるファイルの削除を試みましたが、エラーが発生します。 可能であればストアドからファイルを削除したいですが、難しいようでしたら上記の条件を満たす限り、どのような方法でも構いませんので、教えて欲しいです。 各バージョンは最新バージョンとします。 大変困っていますので、どうかご協力を、宜しくお願い致します。

  • MySQLの日本語入力について

    現在、MySQLをローカルではVer5.7.17、AWSのRDS内のMySQLはVer5.6.27を それぞれ使っています。 ローカルのほうでは、すんなり日本語(全角文字、半角カタカナ)が入るのですが、 RDSのほうではなぜか、全角文字、半角カタカナを入力しようとすると、 から文字になってしまい、何も入ってないし、NULLでもない状態になります。 ちなみに文字コードはどちらとも、UTF-8です。 よろしくお願いします。

  • ASPでのMySQLストアドプロシージャの実行

    ASP(Active Server Pages)を使用してMySQLのストアドプロシージャを実行する方法をどなたか教えて頂けますでしょうか? 環境  OS    :Windows2000Server  WEBサーバー :IIS  DB    :MySQL Ver5.1.22 ODBC   :MyODBC Ver3.51 MySQLへの接続は、問題無く行えてそうなんですが ストアドプロシージャの実行がうまくいきません。 ASPには、以下のようなコードを記述しています。 Set cn = Server.CreateObject("ADODB.Connection") cn.ConnectionString = "Provider=MSDASQL;DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;USER=root;PASSWORD=XXXX;DATABASE=XXXX;STMT=set names sjis;OPTION=2" cn.Open Set cmd = Server.CreateObject("ADODB.Command") Set rs = Server.CreateObject("ADODB.Recordset") cmd.ActiveConnection = cn cmd.CommandText = "test2" cmd.CommandType=adCmdStoredProc set rs = cmd.Execute ・・・ test2というストアドプロシージャは、 begin select * from テーブル名; end と、単純なselect文となっています。 IEでWEBページを開くと エラー タイプ Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [MySQL][ODBC 3.51 Driver][mysqld-5.1.22-rc-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{ call test2 }' at line 1 というエラーが表示されてしまいます。 0x80040E14 というエラーコードをネットで調べてみたりしたのですが 構文エラーというような説明が書かれており、何が原因なのか良く分からなく困っています。 何が原因なのか分かる方がいらっしゃいましたら 教えて下さい。

  • MYSQLのストアドでの動的SQLについて

    MYSQL初心者ですが、よろしくお願いします。 MYSQL(ver5.5)でストアドプロシージャを作成しようと思います。 WEBの検索画面に入力された条件に応じて、WHERE句を動的に作成したいのです。 例えば、WEBの検索画面の検索条件に、 (1)氏名 (2)住所 (3)電話番号 があり、(1)と(3)に入力された場合は、 あるテーブルの検索条件を WHERE 氏名=入力氏名 AND 電話番号=入力電話番号 のように動的にSQLを作成したいです。 (条件に応じて、静的なSQLを使い分けるやりかたはしたくない) このような動的なSQLはストアドプロシージャで作成できのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • :ストアドプロシージャ内での配列の使用:

    :ストアドプロシージャ内での配列の使用: 環境 アプリケーション側:C#.net データベース側:Oracle10g アプリケーションから文字列の配列を引数として渡し、 プロシージャ内でその配列の中身がなくなるまでループでUPDATE文を実行しようとしています。 引数例(文字列配列):para[] (para[0]='ねこ',para[1]='ねずみ',para[2]='たぬき',para[3]='人',…) While文1週目では「ねこ」を、2週目では「ねずみ」をSET句に格納したSQLを実行するのが目的です。 同じストアド内であれば、結果セットをカーソルに放り込み フェッチ&Whileで順番に取得する事ができますが、 外部から引数として渡された配列をストアド内ループで順番に取得するにはどうしたらよいのでしょうか? アプリ側で引数を特定してから渡せば配列個数文ストアドをコールするという手段が取れますが 配列数が多くなった時に遅くなりすぎるという問題があります。 どなたか詳しい方おりましたらご教授いただきたく思います。宜しくお願いします。

  • MySQLではなく、Postgresを使った方がよいようなケースは何かありますか

    オープンソースのデータベース(最新バージョン)を 導入する場合はやはり、MYSQLにしたほうがよいでしょうか。 Postgresを導入した方がよいような事例があれば、 教えてください。 昔のバージョンですと、MySQLは圧倒的に早い 代わりに、副問い合わせが使えなかったり、 トリガーやストアドプロシージャーが使えなかったり したわけですが、比較的新しいバージョンですと、 MySQLにもこうした機能がついています。 MySQLは機能が豊富になった代わりに、若干遅くなった とかも聞きますが、やはりPostgresよりは早い と聞きます。 それでもPostgresとMySQLでは、ストアドプロシージャー やトリガーの仕様自体が少し異なっているようですが、 特にこうした面でPostgresを使ったほうがよい ようなケースがあれば、教えてください。 お願いします。