Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съхранявате арабски текст в базата данни на mysql с помощта на python?

Да изясня някои неща, защото това ще ви помогне и в бъдеще.

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

Това не е арабски низ. Това е обект в 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 , така че програмата не знае как да го преобразува в байтове.

Компютрите съхраняват байтове. Така че, когато съхранявате или предавате информация, трябва винаги да я кодирате/декодирате правилно.

Тази стъпка за кодиране/декодиране понякога се нарича unicode сандвич - всичко отвън е байтове, всичко вътре е уникод.

Като изключим това, трябва да кодирате правилно данните, преди да ги изпратите към вашата база данни; за да направите това, кодирайте го:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Бързо импортиране на данни в mysql в Java

  2. Търсенето в пълен текст в MySQL булев режим връща твърде много резултати

  3. Най-добрият начин да се справите с връзките много към много в PHP MySQL

  4. Присъединете две таблици mysql, връзка едно към много

  5. обработката на голям брой записи в базата данни с пейджинг се забавя с времето