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

Masalah penyandian unicode python

Coba:

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

Berikut adalah demonstrasi yang menunjukkan bahwa itu berfungsi:

Jika Anda tidak menggunakan use_unicode=True dengan pengaturan berikut, Anda mendapatkan 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)

memunculkan pengecualian:

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

Sementara, jika Anda menggunakan use_unicode=True , Anda dapat memasukkan unicode tanpa kesalahan:

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

cetakan

José Beiträge ∞



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DI MANA nilai TIDAK DI (subquery)

  2. Kunci Asing MySQL Saat Dihapus

  3. MySQL Conditional SELECT di SELECT

  4. Instal dan Gunakan Percona Toolkit di Centos 7

  5. ScrollPane menambahkan ke tata letak kotak