sql >> Database teknologi >  >> RDS >> Mysql

Hvordan gemmer man arabisk tekst i mysql-databasen ved hjælp af python?

For at præcisere et par ting, for det vil også hjælpe dig på vej i fremtiden.

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

Dette er ikke en arabisk streng. Dette er et unicode objekt , med unicode-kodepunkter. Hvis du blot skulle udskrive det, og hvis din terminal understøtter arabisk, ville du få output som dette:

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

For nu at få det samme output som Arabic (الطيران) i din database skal du kode strengen.

Kodning tager disse kodepunkter; og konvertere dem til bytes, så computere ved, hvad de skal gøre med dem.

Så den mest almindelige kodning er utf-8 , fordi det understøtter alle tegn på engelsk, plus en masse andre sprog (inklusive arabisk). Der er også andre, for eksempel windows-1256 understøtter også arabisk. Der er nogle, der ikke har referencer til disse numre (kaldet kodepunkter), og når du forsøger at kode, får du en fejl som denne:

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

Hvad det fortæller dig er, at et eller andet nummer i unicode-objektet ikke eksisterer i tabellen latin-1 , så programmet ved ikke, hvordan det konverteres til bytes.

Computere gemmer bytes. Så når du gemmer eller overfører information, skal du altid kode/afkode den korrekt.

Dette indkodnings-/afkodningstrin kaldes nogle gange unicode-sandwich - alt udenfor er bytes, alt indeni er unicode.

Med det af vejen skal du kode dataene korrekt, før du sender dem til din database; for at gøre det, indkode det:

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

For at bekræfte, at det bliver indsat korrekt, skal du sørge for, at du bruger mysql fra en terminal eller et program, der understøtter arabisk; ellers - selvom det er indsat korrekt, når det vises af dit program - vil du se skraldtegn.



  1. Hvordan er det indre af en udarbejdet erklæring?

  2. Hvordan kan jeg få summen af ​​flere datetime-værdier?

  3. Hvordan LYDER SOM virker i MariaDB

  4. Fejl ved Update Join