Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menyimpan teks arab di database mysql menggunakan python?

Untuk memperjelas beberapa hal, karena itu akan membantu Anda di masa depan juga.

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

Ini bukan string bahasa Arab. Ini adalah objek unicode , dengan titik kode unicode. Jika Anda hanya mencetaknya, dan jika terminal Anda mendukung bahasa Arab, Anda akan mendapatkan output seperti ini:

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

Sekarang, untuk mendapatkan output yang sama seperti Arabic (الطيران) di database Anda, Anda perlu menyandikan string.

Encoding mengambil poin kode ini; dan mengubahnya menjadi byte sehingga komputer tahu apa yang harus dilakukan dengannya.

Jadi pengkodean yang paling umum adalah utf-8 , karena mendukung semua karakter bahasa Inggris, ditambah banyak bahasa lain (termasuk bahasa Arab). Ada juga yang lain, misalnya windows-1256 juga mendukung bahasa Arab. Ada beberapa yang tidak memiliki referensi untuk angka-angka itu (disebut poin kode), dan ketika Anda mencoba untuk menyandikan, Anda akan mendapatkan kesalahan seperti ini:

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

Apa yang memberitahu Anda bahwa beberapa nomor dalam objek unicode tidak ada dalam tabel latin-1 , sehingga program tidak tahu cara mengonversinya menjadi byte.

Komputer menyimpan byte. Jadi saat menyimpan atau mengirimkan informasi, Anda harus selalu mengkodekan/mendekodekannya dengan benar.

Langkah encode/decode ini terkadang disebut sandwich unicode - semua yang di luar adalah byte, semua yang ada di dalam adalah unicode.

Dengan itu, Anda perlu menyandikan data dengan benar sebelum Anda mengirimkannya ke database Anda; untuk melakukannya, enkodekan:

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

Untuk mengonfirmasi bahwa itu dimasukkan dengan benar, pastikan Anda menggunakan mysql dari terminal atau aplikasi yang mendukung bahasa Arab; sebaliknya - meskipun dimasukkan dengan benar, ketika ditampilkan oleh program Anda - Anda akan melihat karakter sampah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Urutan kolom dalam indeks multi-kolom di MySQL

  2. mengatur beberapa kolom menggunakan satu pembaruan

  3. Bagaimana cara memilih baris yang memiliki stempel waktu hari ini?

  4. Konsep Angular 2 dan MySQL

  5. Bagaimana cara menghapus semua karakter numerik non-alfa dari string di MySQL?