Я хотел бы знать, какова лучшая стратегия для кодирования символов, таких как \ alpha, в базу данных MySQL и эффективного запроса к ней.
Я создаю свои таблицы MySQL с помощью «CHARSET = utf8».
import mysql.connector
import urllib
import re
from mysql.connector import errorcode
Connection = mysql.connector.connect(user='XXXX', password='XXXX', unix_socket="mysql.sock")
Cursor = Connection.cursor()
Cursor.execute('''CREATE TABLE IF NOT EXISTS `test` (
`test_string` text NOT NULL,
`id` int(5) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
''')
xml = unicode(urllib.urlopen('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pmc&id=2174229').read(),'utf-8')
Cursor.execute('''INSERT INTO `test` (`id`, `test_string`) VALUES ('''+"001"+", '"+re.escape(xml).encode("utf-8")+"');")
Затем, при кодировании строк, перед вставкой их в базу данных MySQL я гарантирую, что закодирую их в utf8, используя «.encode (» utf-8 «)», а при вставке я гарантирую, что перед вставкой нужно экранировать строку, используя «re.escape».
Затем я иду в phpMyAdmin, чтобы посмотреть строки данных, например
Исходная строка
"generating the α- and β-APP",
После вставки, в базе данных я вижу это как
"generating the α- and β-APP"
Однако, если я отобразлю после запроса строки, содержащие «создание» из базы данных на html-странице, символы α и β отображаются правильно на HTML-странице. Я сбит с толку.
Почему это так? Схожий вопрос, который у меня есть, заключается в том, что теперь, если мне нужно запросить в базе данных MySQL эти специальные символы (α, β и т. Д.), Как мне это сделать? Прошу прощения, если я пропустил какие-либо очевидные проблемы.
попробуйте следующее:
(user='XXXX', password='XXXX', unix_socket="mysql.sock",charset='utf8',use_unicode=True)
и перейдите к phpmyadmin и измените параметры сортировки utf8_general_ci.
Хорошо, наконец, проблема заключалась в том, что специальные символы были каким-то образом преобразованы в коды HTML. Итак, это сделал трюк
import HTMLParser
h= HTMLParser.HTMLParser()
h.unescape(test_string)