sql >> Databáze >  >> RDS >> Mysql

Jak uložit arabský text do databáze mysql pomocí pythonu?

Abych ujasnil pár věcí, protože vám to pomůže i v budoucnu.

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

Toto není arabský řetězec. Toto je objekt unicode , s kódovými body Unicode. Pokud byste jej jednoduše vytiskli a váš terminál podporuje arabštinu, dostanete výstup takto:

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

Nyní, abyste získali stejný výstup jako Arabic (الطيران) ve vaší databázi musíte řetězec zakódovat.

Kódování bere tyto kódové body; a jejich převod na bajty, aby počítače věděly, co s nimi dělat.

Nejběžnějším kódováním je tedy utf-8 , protože podporuje všechny znaky angličtiny a spoustu dalších jazyků (včetně arabštiny). Existují i ​​jiné, například windows-1256 podporuje také arabštinu. Existují některá, která pro tato čísla nemají odkazy (nazývané kódové body), a když se pokusíte kódovat, zobrazí se tato chyba:

>>> 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)

Říká vám to, že nějaké číslo v objektu unicode v tabulce latin-1 neexistuje , takže program neví, jak jej převést na bajty.

Počítače ukládají bajty. Takže když ukládáte nebo přenášíte informace, musíte je vždy správně zakódovat/dekódovat.

Tento krok kódování/dekódování se někdy nazývá sendvič unicode - vše venku je bajty, vše uvnitř je unicode.

Když to není z cesty, musíte data před odesláním do databáze správně zakódovat; Chcete-li to provést, zakódujte jej:

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))

Chcete-li potvrdit, že se vkládá správně, ujistěte se, že používáte mysql z terminálu nebo aplikace, která podporuje arabštinu; jinak – i když je vložen správně, když je zobrazen vaším programem – uvidíte nesmyslné znaky.



  1. Jak porovnat dvě pole a vybrat pouze neshodné prvky v postgresu

  2. connect ECONNREFUSED - node js , sql

  3. Jak zřetězit všechny sloupce ve výběru pomocí SQL Server

  4. Cx-Freeze :Showwarning AttributeError:Objekt 'NoneType' nemá atribut 'write'