@voiceofnoise

Почему в БД некорректно записываются кириллические строки?

Создание таблицы:
mysql> create table names (name text);
Python 2:
# -*- coding: utf-8 -*-
import MySQLdb

db = MySQLdb.connect('localhost', msql_user_name, msql_user_pass, 'vstat')
cursor = db.cursor()
insert = "INSERT INTO names (name) VALUES ('%s')" % 'абв'
cursor.execute(insert)
db.commit()
db.close()

mysql> SELECT * FROM names;
+--------------+
| name         |
+--------------+
| абв       |
+--------------+

При добавлении:
db.set_character_set('utf8')
cursor.execute('SET NAMES utf8;')
cursor.execute('SET CHARACTER SET utf8;')
cursor.execute('SET character_set_connection=utf8')

Вылетает ошибка:
Warning: Incorrect string value: '\xD0\xB0\xD0\xB1\xD0\xB2' for column 'name' at row 1
  cursor.execute(insert)

и вывод такой:
mysql> SELECT * FROM names;
+------+
| name |
+------+
| ???  |
+------+
  • Вопрос задан
  • 854 просмотра
Решения вопроса 1
skipirich
@skipirich
проходил мимо
Посмотри в какой кодировке сама таблица
SELECT CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.columns
WHERE table_name =  'name'

И возможно в insert перед 'абв' имеет смысл попробовать поставить u
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Свойства CHARACTER SET у базы, таблицы, колонки.
Кодировка по умолчанию на сервере.
SET NAMES UTF8 после коннекта.
Ответ написан
sim3x
@sim3x
python 2
insert_query = u"INSERT INTO names (name) VALUES ('%s')"
cur.execute(insert_query, u'абв')


https://dev.mysql.com/doc/connector-python/en/conn...
Ответ написан
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Надо пересоздать базу:
CREATE DATABASE `##DATABASENAME##` /*!40100 DEFAULT CHARACTER SET utf8 */;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы