StringPropertyの最大サイズ
こちらのドキュメントによると「StringPropertyに入れられる文字列は500byteまで」と書いてます。500byteと言われても、文字コードによって一文字あたりのサイズは違うしなあ。
というわけで実験してみました。
このページで適当な文字列を入力して……
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> </head> <body> <form action="/submit" method="POST"> <input type="text" name="the_text"> <input type="submit"> </form> </body> </html>
こっちのコードでStringPropertyの中に突っ込んでみます。
import wsgiref.handlers from google.appengine.ext import webapp from google.appengine.ext import db class MyString(db.Model): str = db.StringProperty() class SubmitPage(webapp.RequestHandler): def post(self): obj = MyString() obj.str = self.request.get('the_text') obj.put() obj2 = db.get(obj.key()) self.response.out.write(obj2.str) wsgiref.handlers.CGIHandler().run(webapp.WSGIApplication([('/submit', SubmitPage)]))
これらをGAEサーバにアップロードして、実験。
- '0'を500文字入力 → 正常
- '0'を500文字入力 → 500 ERROR
妥当ですよね。
さて、ここで「あ」を限界まで入力しますが、何文字まで入力できるでしょうか? EUC-JPやSHIFT_JISだと「あ」は2bytes、UTF-16でも2bytes、UTF-8だと3bytesです。
答は……
- 'あ'を500文字入力 → 正常
- 'あ'を501文字入力 → 500 ERROR
あっるぇぇぇ?
正解は、どうやら「StringPropertyには(500bytesではなくて)500文字を格納することができる」のようです。
ドキュメントの修正が必要なんじゃない?とMLに投げておきました。