• ベストアンサー

文字数について

プログラム初心者です mysqlのカラム、varchar(255)に実験で270文字HTMLフォームからmysqlに入れてみました そうしたら、255文字しか保存されていませんでした もしかしたら、PHPで文字数制限しなくてもmysql側のカラムの文字数設定だけでいいのではないかと思ってしまいましたがこれだと不具合とかでてきますか? データ型のtextも文字数指定できるのでしょうか? やっぱり、文字数制限はPHPなどでやったほうがいいのでしょうか? よろしくお願いします

  • flash0
  • お礼率97% (297/306)
  • MySQL
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

> PHPで文字数制限しなくてもmysql側のカラムの文字数設定だけでいいのではないかと思ってしまいましたがこれだと不具合とかでてきますか? たとえ255文字までしか保存できないのが仕様通りであっても、 ユーザから「せっかく入力したのに途中までしか保存されてないんだけど? バグ?」と思われてしまいます。 なので、PHP側で255文字までしか入力できないようにしておくほうが親切でしょう。 > データ型のtextも文字数指定できるのでしょうか? 文字数指定はできませんが、最大長は決まっています。 http://dev.mysql.com/doc/refman/5.1-olh/ja/blob.html http://dev.mysql.com/doc/refman/5.1-olh/ja/storage-requirements.html

flash0
質問者

お礼

回答ありがとうございます やっぱり、そのほうが親切ですよね。PHP側でやっておきます text型は指定できないのですね。これは絶対やらないとダメですね

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

入力フォームは送信前に確認画面をだすはずです 確認画面で表示されたのものと保存されるものが異なれば明らかにバグです きちんとやるなら確認画面時点でデータの整合性をとるべきです

flash0
質問者

お礼

回答ありがとうございます チェックすることしにしました、ありがとうございました

関連するQ&A

  • フォームのチェック

    mysqlにフォームから送られてきたurlを保存しようと思います そのままだとセキュリティ的にまずいですよね?phpでurlのチェックをする方法はありますか? $hogeにpostされたurlを受け取ってあります varchar(255)のカラムに保存しようと思うのですが255文字超えた文字は登録されないから、文字数制限は必要ないですよね?

    • ベストアンサー
    • PHP
  • フォーム要素の文字数制限について

    それぞれのフォーム要素に文字数(またはバイト数)の制限ってあるんでしょうか? あるとしたら何文字ですか? maxlengthなどで指定する値や、受け取るプログラム側の制限ではなく、HTMLの仕様としての制限についてです。 特に知りたいのが、隠しフィールド(input type="hidden")の文字数制限です。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • varchar(M)のMは文字数ですかバイト数ですか?

    os:ターボlinuxです。 varchar属性にvarchar(10)と指定すると10文字入ると思っていたのですが、全角で入力すると5文字、半角で10文字でした。 マニュアル6.2のカラム型によると、 M の範囲は 0 〜 255 文字とあります。 TINYBLOB , TINYTEXT は最大長が 255(2^8 - 1)文字 BLOB , TEXTは 最大長が 65535(2^16 - 1)文字 MEDIUMBLOB , MEDIUMTEXTは 最大長が 16777215(2^24 - 1)文字 そして LONGBLOB , LONGTEXT は最大長が 4294967295 または 4G(2^32 - 1)バイト となっています。 LONGだけが「バイト」という表現、それ以外はvarcharも含めて文字数という表現なので、当然文字数でカウントしていると思っていたので完全に計算が狂いました。 これはマニュアルが間違えているのでしょうか? それとも、文字コードによって変わるのでしょうか? その場合、どの文字コードがバイト換算でどの文字コードが文字数換算なのでしょうか? また、MySQLでどの文字コードが使用されているかどこを見れば分かるのですか? となたかご教授下さい。

    • ベストアンサー
    • MySQL
  • 【超基礎】全角文字数とバイト数の数え方

    氏名を格納するmynameという項目があるとします。ここには 全角10文字まではOK、全角11文字以上ダメ、 という文字数制約を設けたいと思います。 MySQL側: myname varchar(20) なフィールドをテーブルに作成し、 PHP側: if (strlen($myname) > 20) { echo "全角10文字までにしてください"; } としました。 HTML側で、 「小泉純一郎」と入れたら、全角6文字なのに 「全角10文字までにしてください」と出てしまいます。 全角10文字まではOK、全角11文字以上ダメ、 とするには、 MySQL側:varchar(20) PHP側:> 20 の数字をいくつにすればいいですか。 全角は2バイトだと思ってたのですが。

    • ベストアンサー
    • PHP
  • MySQL5.1の文字列サイズは文字数ではない?

    blue-horse と申します。 お世話になります。 MySQL 5.1 でVARCHAR、CHAR などの字列型フィールドのサイズ指定は、文字数であると認識していたのですが、違うのでしょうか。 utf8の日本語を保存しようとすると、3倍のサイズを要してしまいます。 これはutf8の漢字は3バイトであることと符合するので、なんとなく理解できるのですが、MySQL5.1のリファレンス記述と一致しない様に見えて、納得できません。(不便ですし) >CHAR と VARCHAR タイプには、格納したい最大文字数を表す長さが宣言されています。例えば、CHAR(30) は最大30文字まで持つ事ができます。 「MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.4.1 CHAR と VARCHAR タイプ」 より http://dev.mysql.com/doc/refman/5.1/ja/char.html あるいは、どこか設定を誤っているのでしょうか。 ご教示頂ければ有り難く存じます。 以上、失礼いたします。

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

    MySQL5.0を2つの環境に構築をして、 それぞれPHPからDBアクセスをしています。 そのときにvarcharに登録できる文字数に違いがあり、 原因をしてもなぜ違いがでるか不明でした。 (1)同一マシン内に以下を構築 ・Windows2003Server(IIS) ・PHP5.2.12 ・MySQL5.0 (2)同一マシン内に以下を構築 ・WindowsXP(IIS) ・PHP4.4.2 ・MySQL5.0 があります。 varchar(100)に対して、超過するような文字500文字などを登録しようとすると、 (1)の環境では登録エラーとなり、DB登録できませんでした。 (2)の環境ではDBのサイズまで登録されて、超過分は破棄された状態で、DB登録がされていました。 MySQLの構築方法は同じですが、 呼び出し元のPHP(IIS?)による影響でしょうか?

  • ACCESS 入力文字数制限

    初歩的だとは思うのですが フォームで、テキストの入力文字数を制限したいのですが、 方法が良く分からず、出来るのかどうかもわかりません。 エラーチェックとかではなく、たとえば3文字以上ぜったい入れられないように。 (HTMLで言うところのmaxlengthみたいな感じで・・) どなたか教えてください。お願いします。

  • SJISのCHAR(8)に入れられる文字数について

    SJISのCHAR(8)に入れられる文字数について MySQLのver 5.0にて、文字コードをSJISにして、カラムをCHAR(8)で設定した場合、 英数字1バイト文字の場合、16文字まで入れられるのでしょうか? それとも、単純に文字数で弾かれるのでしょうか? 現在、ver 4.0.24(文字コードは全部Cでいうところのchar1バイトで扱う)から、ver 5.0台に移行を考えており、移行するとした場合、PHPなどのプログラムをどの程度変更しなければならないかを考えています。 たとえば、CHAR(8)のカラムへデータを入れる場合、PHPで if( strlen($hoge) <= 16 ){ $hogeをCHAR(8)のカラムへINSERT処理 } とすると、$hogeが英数字だった場合、16文字まで、INSERT文にかかってしまうのですが、これで問題なく16字までINSERT出来るのかどうか知りたいのです。 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 文字数制限?

    phpで、文字列をPostgresに保存に保存するという、 単純な、日記登録サイトを自作しています。 ところが、最近textareaへの文字数が多い場合、 submitからの保存を受け付けてもらえない事に気付きました。 ボタンを押しても無反応。文字を削ると、保存可能。 要は文字数制限の様です。 しかし、同じ文字数でもPostgresのコンソールから直接叩くと、保存できます。 送信する文字列、<textarea>、に文字数の制限があるのでしょうか? であれば、何文字でしょう。 また、他に制限文字数を気にしないでもいいくらいの設定値などありませんでしょうか?

    • ベストアンサー
    • PHP
  • textareaタグに入力された改行コードの扱い

    PHPとMySQLを利用して簡単なWEBアプリを作っています。 <textarea>内に入力された文字列をMySQLにINSERTする際、使用しているブラウザによって改行コードの文字数が異なるため、MySQLにINSERTされる文字数が異なってしまいます。具体的にいうと、 --MySQL仕様-- <textarea>内のデータを、MySQLのとあるtableにINSERTする。 そのtableの<textarea>のデータを登録するcolumnにvarchar(1000)を指定している。 --PHP仕様-- <textarea>内のデータをPOSTより受け取り、其の生データを上記設定したcolumnにINSERTする。 (文字数チェックの際、\r\nを\nに変換し、改行コードを1文字として解釈させ、カウントしている。) そのデータを訪問者が閲覧できるようにpreg_replaceで改行コードを<br />に変換し表示している。 INSERTされたデータは再編集できるよう、編集ページを設けている。 ◆問題 ブラウザごとで<textarea>内の改行コードが異なるため、文字数カウントの際、\n、\r、\r\nによって文字数にズレが生じてしまい、その結果varchar(1000)で設定したcolumnでは使用したブラウザによってINSERT可能な文字数が異なってしまう。 ◆質問 ブラウザによって出力される改行コードが異なるため、MySQLのtableにINSERTされる文字数が異なってしまいます。改行コードを1文字と解釈し、ブラウザによる差異をなくす良い方法はありませんか? --自身で考えた方法-- ・varchar(1000)を例えばvarchar(1200)などとし、PHP側のみで文字数の制限を掛ける。 ・一部のサイトでは\r\nを\nに変換し、INSERTするって方法が記載ありました。この方法を選択すると、再編集のページでブラウザを判別し、\nを\r\nに変換する手間があるので仕様変更に手間がかかりそう。 以上となります。独学の自分には「自身で考えた方法」しか思い浮かばず、MySQLに登録する際、ブラウザによる改行コードの文字数の差異の良い方法が浮かびませんでした。何か良い方法をご教授いただけませんでしょうか?宜しくお願いします。

    • ベストアンサー
    • MySQL