sql >> データベース >  >> RDS >> Mysql

Pythonを使用してアラビア語のテキストをmysqlデータベースに保存する方法は?

    いくつかのことを明確にするために、それは将来的にも役立つからです。

    txt = u'Arabic (\u0627\u0644\u0637\u064a\u0631\u0627\u0646)'
    

    これはアラビア語の文字列ではありません。これはUnicodeオブジェクトです 、Unicodeコードポイントを使用します。単に印刷するだけで、端末がアラビア語をサポートしている場合は、次のような出力が得られます。

    >>> txt = u'Arabic (\u0627\u0644\u0637\u064a\u0631\u0627\u0646)'
    >>> print(txt)
    Arabic (الطيران)
    

    ここで、Arabic (الطيران)のような同じ出力を取得します データベースでは、文字列をエンコードする必要があります。

    エンコーディングはこれらのコードポイントを取ります。そして、それらをバイトに変換して、コンピューターがそれらをどう処理するかを認識できるようにします。

    したがって、最も一般的なエンコーディングはutf-8です。 、英語のすべての文字に加えて、他の多くの言語(アラビア語を含む)をサポートしているためです。他にも、たとえばwindows-1256などがあります。 アラビア語もサポートしています。これらの数値(コードポイントと呼ばれる)への参照がないものもあり、エンコードしようとすると、次のようなエラーが発生します。

    >>> print(txt.encode('latin-1'))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeEncodeError: 'latin-1' codec can't encode characters in position 8-14: ordinal not in range(256)
    

    つまり、Unicodeオブジェクトの一部の数値がテーブルlatin-1に存在しないということです。 、したがって、プログラムはそれをバイトに変換する方法を知りません。

    コンピュータはバイトを保存します。したがって、情報を保存または送信するときは、常に正しくエンコード/デコードする必要があります。

    このエンコード/デコードステップは、ユニコードサンドイッチ と呼ばれることもあります。 -外側はすべてバイトで、内側はすべてユニコードです。

    それが邪魔にならないように、データベースに送信する前にデータを正しくエンコードする必要があります。これを行うには、エンコードします:

    q = u"""
        INSERT INTO
           tab1(id, username, text, created_at)
        VALUES (%s, %s, %s, %s)"""
    
    conn = MySQLdb.connect(host="localhost",
                           user='root',
                           password='',
                           db='',
                           charset='utf8',
                           init_command='SET NAMES UTF8')
    cur = conn.cursor()
    cur.execute(q, (id.encode('utf-8'),
                    user_name.encode('utf-8'),
                    text.encode('utf-8'), date))
    

    正しく挿入されていることを確認するには、アラビア語をサポートするターミナルまたはアプリケーションからmysqlを使用していることを確認してください。そうしないと、正しく挿入されていても、プログラムで表示されたときに、ごみ文字が表示されます。



    1. CloudFirestoreデータベースへのデータの追加

    2. 列の値がNULLの場合にデフォルト値を達成するにはどうすればよいですか?

    3. メニューからMYSQLデータを表示する

    4. トリガーの挿入値を取得する方法