sql >> Database >  >> RDS >> Mysql

Python Unicode-coderingsprobleem

Probeer:

con = mdb.connect('loclhost', 'root', '', 'mydb', 
                  use_unicode=True, charset='utf8')

Hier is een demonstratie die laat zien dat het werkt:

Als u use_unicode=True . niet gebruikt met de volgende setup krijg je een UnicodeEncodeError:

import MySQLdb
import config

def setup_charset(cursor, typ='latin1'):
    sql = 'DROP TABLE IF EXISTS foo'
    cursor.execute(sql)
    sql = '''\
        CREATE TABLE `foo` (
          `fooid` int(11) NOT NULL AUTO_INCREMENT,
          `bar` varchar(30),
          `baz` varchar(30),
          PRIMARY KEY (`fooid`)) DEFAULT CHARSET={t}
        '''.format(t=typ)
    cursor.execute(sql)
    sql = 'INSERT INTO foo (bar,baz) VALUES (%s,%s)'

connection = MySQLdb.connect(
    host=config.HOST, user=config.USER,
    passwd=config.PASS, db='test')

cursor = connection.cursor()
setup_charset(cursor, typ='utf8')
sql = u'INSERT INTO foo (bar,baz) VALUES (%s,%s)'
try:
    cursor.execute(sql, [u'José Beiträge', u'∞'])
except UnicodeEncodeError as err:
    # You get this error if you don't use
    # (use_unicode=True, charset='utf8') see below.
    print(err)

verhoogt de uitzondering:

'latin-1' codec can't encode character u'\u221e' in position 0: ordinal not in range(256)

Terwijl, als u use_unicode=True . gebruikt , kunt u unicode zonder fouten invoegen:

connection = MySQLdb.connect(
    host=config.HOST, user=config.USER,
    passwd=config.PASS, db='test',
    use_unicode=True,
    charset='utf8')
cursor = connection.cursor()
cursor.execute(sql, ['José Beiträge', '∞'])
cursor.execute('SELECT * from foo')
for row in cursor:
    print(u'{} {}'.format(*row[1:]))

afdrukken

José Beiträge ∞



  1. Speel 2.4 - Slick 3.0.0 - VERWIJDEREN werkt niet

  2. Hoe koppel ik een native query aan een POJO als ik geen entiteit in mijn project heb?

  3. tijdelijk mysql externe toegang uitschakelen

  4. Wat kan een aggregatiefunctie doen in de ORDER BY-component?