Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Re: статистика посещений проектирование базы / 10 сообщений из 10, страница 1 из 1
21.07.2017, 20:02
    #39493146
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
Приветствую участников форума!
Вобщем я сделал домашнее задание, поискал инфу, прежде чем жечь здесь.
В более новых версиях MySQL >= 5.7.*, добавили поддержку 4-х байтной кодировки utf8 - utf8mb4, я думаю что из-за этого проблема.
А проблема заключается после выполнение запроса 'SHOW VARIABLES', выбрасывает ворнинг:
Warning: b"Incorrect string value: '\\xD3\\xF0\\xE0\\xEB\\xFC\\xF1...' for column 'VARIABLE_VALUE' at row 480"
Код клиента:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
import MySQLdb as mydb

conn = mydb.connect(
    host='localhost',
    user='root',
    passwd='1234',
    db='test',
    charset='utf8mb4',
    use_unicode=False
) 
cur = conn.cursor()
cur.execute("SHOW VARIABLES")


А здесь вывод настроек сервера при выполнении запроса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
mysql> SHOW VARIABLES WHERE variable_name LIKE 'character\_set\_%' OR variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_general_ci |
| collation_database       | utf8mb4_general_ci |
| collation_server         | utf8mb4_general_ci |
+--------------------------+--------------------+
10 rows in set, 1 warning (0.01 sec)



Оба модуля и pymysql и MySQLdb имеют такое же поведение: Первый запрос после соединения выбрасывает этот ворнинг но последующие запросы выводятся без каких либо ошибок и ворнингов - что странно.

P.S.
Понимаю что пост немного не соответствует форуму, с этим вопросом лучше на питон-форумы, но возможно кто-то сталкивался.
...
Рейтинг: 0 / 0
21.07.2017, 20:09
    #39493148
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
ambasadorВ более новых версиях MySQL >= 5.7.*, добавили поддержку 4-х байтной кодировки utf8 - utf8mb4 в 5.5.3

ambasadorя думаю что из-за этого проблема.а зачем вы эту кодировку используете?
...
Рейтинг: 0 / 0
21.07.2017, 20:22
    #39493152
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
miksoftambasadorВ более новых версиях MySQL >= 5.7.*, добавили поддержку 4-х байтной кодировки utf8 - utf8mb4 в 5.5.3

ambasadorя думаю что из-за этого проблема.а зачем вы эту кодировку используете?
Вначале у меня стояла как раз utf8, затем я стал искать ифу по этому ворнингу в гугле и пришел на какой-то блог, там говорится что якобы надо забить на utf8 и переходить на utf8mb4, я переделал на utf8mb4 в надежде то что вывод будет без этого ворнинга, но тщетно. Да и на stackoverflow тоже много проблем и решения c utf8 -> utf8mb4
А что с этой кодировкой не так?
...
Рейтинг: 0 / 0
21.07.2017, 20:38
    #39493157
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
...
Рейтинг: 0 / 0
21.07.2017, 20:59
    #39493162
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
ambasadorWarning: b"Incorrect string value: '\\xD3\\xF0\\xE0\\xEB\\xFC\\xF1...' for column 'VARIABLE_VALUE' at row 480"
А это и не utf8 и не utf8mb4.
Указанные hex-значение соответствует cp1251 строке "Уральс"
...
Рейтинг: 0 / 0
21.07.2017, 21:07
    #39493165
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
ambasadorтам говорится что якобы надо забить на utf8 и переходить на utf8mb4Единственная причина сделать это описана по ссылке, которую я давал выше.
А вот причин не делать этого куда больше. В т.ч. неопределенность с расчетами лимитов и занимаемого места. Например, в тех случаях, где для utf8 количество символов умножалось на 3, то теперь будет на 4 ?
Я, например, сходу не скажу какие это может иметь последствия.
...
Рейтинг: 0 / 0
21.07.2017, 22:06
    #39493183
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
MelkijambasadorWarning: b"Incorrect string value: '\\xD3\\xF0\\xE0\\xEB\\xFC\\xF1...' for column 'VARIABLE_VALUE' at row 480"
А это и не utf8 и не utf8mb4.
Указанные hex-значение соответствует cp1251 строке "Уральс"
Кстати да, надо было сразу обратить внимание на это. Попробовал конвертнуть(\\xD3\\xF0\\xE0\\xEB\\xFC\\xF1):
Код: python
1.
2.
3.
>>> import binascii
>>> binascii.unhexlify(b"d3f0e0ebfcf1").decode("cp1251")
"Уральс"


Логично предположить что значение переменной - часовой пояс.
...
Рейтинг: 0 / 0
21.07.2017, 22:19
    #39493191
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
А как сделать выборку 'SHOW VARIABLES' но только используя оператор SELECT чтобы добавить счетчик и посмотреть действительно-ли на 480 строке есть значение 'Уральс%'? Мне кажется это time_zone переменная, но там SYSTEM стоит.
...
Рейтинг: 0 / 0
21.07.2017, 23:05
    #39493214
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
Сделал выборку
Код: plsql
1.
select *, @cnt := @cnt + 1 as counter from performance_schema.global_variables cross join (select @cnt := 0) r


Но там на 480 строке переменная tmpdir с значением пути до временной директории, может сортировка другая при выполнении запроса Show Variables. В вобщем мое предположение: цикл выборки переменных доходит до time_zone чтобы извлечь значение, а там SYSTEM, потом каким-то магическим способом извлекается из системы часовой пояс и подставляется, в моем случае "Уральское время(лето)"(Windows7), а винда то она на cp1251, вот и приехали...
...
Рейтинг: 0 / 0
22.07.2017, 05:45
    #39493242
ambasador
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: статистика посещений проектирование базы
Получилось пофиксить этот трабл посредством редактирования реестра:
1. Переходим в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformat
2. Здесь нам нужны два параметра StandardName и DaylightName, в значениях у них ссылка на tzres.dll видимо библиотека ресурсов часовых поясов.
3. Подставляем свои значения в оба параметра, можете вписывать все что угодно, кроме кириллицы, а вообще чтобы надежнее - любые символы в пределах от 32-127(dec) ASCII

Windows7(x64) + MySQL57
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Re: статистика посещений проектирование базы / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]