Nano Hash - криптовалюты, майнинг, программирование

MYSQL: строки в DDL VIEW через несколько часов превратились в искаженные символы

Недавно я изменил DDL VIEW с помощью Workbench, добавив фильтр со строками китайских символов. DDL может быть успешно сохранен и отлично работает сразу после изменения. Однако сама модификация в DDL через несколько часов превратилась в искаженные символы. База данных character_set_database и набор символов некоторых столбцов изначально были utf8 (utf8_general_ci). После получения ошибки я сделал все из них utf8mb4 с сопоставлением по умолчанию (utf8mb4_0900_ai_ci). Искаженные символы действительно изменились после изменения набора символов, но они все еще искажены. Есть идеи?

Пример:
DDL сразу после модификации: где m.NAME не в ('王曉明','張小英')
DDL через несколько часов после модификации: где m.NAME не в ('???D?' ,'??\?')

Среда:
MYSQL 8.0.13 Community Server — GPL
Windows 10 Professional, 64-разрядная версия (традиционный китайский; набор символов для ввода: UNICODE)
Workbench 8.0.13

Показать переменные типа '%char%'
Результат:
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
character_sets_dir C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\


  • После тестирования в течение нескольких часов произошло то, что пакетный файл запускается автоматически. Он удаляет таблицу, используемую в представлении, и снова создает таблицу. После процесса VIEW DDL пошёл не так. Таблица удаления SQL CODES, если она существует с прошлого месяца; создать таблицу с прошлого месяца, выбрав * из ...; 27.04.2020
  • Почему бы просто не воссоздать вид? 27.04.2020
  • Воссоздайте представление, только временно устраните проблему. В представлении я использовал таблицу под названием «с прошлого месяца», которая обновлялась 3 раза в день через пакетный файл Windows. В пакетном файле я удаляю существующий с прошлого месяца и снова создаю новый с прошлого месяца из таблицы гораздо большего размера (ПРОБЛЕМА ВЫЗЫВАЕТ ПРОБЛЕМУ ПРОБЛЕМЫ — УДАЛИТЬ И СОЗДАТЬ ПРОЦЕСС). Таким образом, я могу ускорить просмотр и другие процессы, потому что они имеют дело с только данные с прошлого месяца (не данные за годы). 28.04.2020

Ответы:


1

Пожалуйста, предоставьте ссылку на Windows UNICODE - нам нужно определить, действительно ли это "кодовые точки Unicode" или на самом деле "UTF-8". Если вы можете предоставить шестнадцатеричный дамп небольшого текста, я могу вывести из него ответ.

В частности, 王曉明張小英, закодированный в UTF-8 (MySQL utf8 или utf8mb4), является шестнадцатеричным

E78E8B E69B89 E6988E E5BCB5 E5B08F E88BB1

(Пробелы добавляются к отдельным символам.) Для Unicode (MySQL UCS2):

738B 66C9 660E 5F35 5C0F 82F1

Итак, если вы получаете второй гекс, то вам нужно объявить, что клиент использует ucs2, а не utf8mb4. Между тем вполне разумно, чтобы столбцы в ваших таблицах были utf8mb4. (И я рекомендую такие.)

«Набор символов» и «сопоставление»: utf8mb4 — это «набор символов»; он определяет «кодировку», если байты. utf8mb4_0900_ai_ci — это «сопоставление»; он определяет порядок сортировки символов. У вас проблема с кодировкой, а не с сортировкой.

«несколько часов после модификации» — это напоминает мне происхождение компьютерного термина «ошибка». Большинство оригинальных компьютеров были построены из электронных ламп. Свет, исходящий из трубок, привлекал мотыльков. Иногда они вызывали аппаратные проблемы.

Hex A4FDBEE5A9FA — это кодировка Big5 для 王曉明.

27.04.2020
  • В Windows я набрал 王曉明 в тексте. Ввод на веб-сайте online-toolz .com/tools/text-hex-convertor.php, а шестнадцатеричный вывод — e78e8be69b89e6988e. Для тестирования я воссоздал VIEW с синтаксисом SQL, где m.NAME ‹› '王曉明', который отлично работал. Однако после удаления и повторного создания таблицы в прошлом месяце строка «王曉明» в VIEW DDL стала «xA4xFDxBExE5xA9xFA». В этот момент, когда я пытаюсь отредактировать DDL, Workbench показывает предупреждение о том, что не удалось создать/изменить VIEWNAME, плохое преобразование. 28.04.2020
  • Традиционный китайский язык Windows 10 поставляется со встроенным редактором метода ввода для китайского языка (IME), который позволяет вам выбирать из двух наборов символов вывода, а именно BIG5 и UNICODE. Скриншот можно найти на сайте ddm.org.tw/ddm_input/images/win10_04. JPG 28.04.2020
  • hex A4FDBEE5A9FA — это кодировка Big5 для этой строки. MySQL также понимает, что CHARACTER SET. 28.04.2020
  • Проблема была связана с CMD в традиционной китайской Windows, которая по умолчанию использует кодировку BIG5. Хотя я не помещал в пакетный файл строки китайских символов, это повлияло на DDL моих представлений (ошибка?). После того, как я добавил в начало батника командную строку chcp 65001, заставив CMD использовать UTF-8, проблема исчезла. Джеймс, спасибо, что указали на то, что A4FDBEE5A9FA — это кодировка Big5, что заставило меня поближе взглянуть на Windows CMD, странную программу, которая в 2020 году все еще использует Big5 по умолчанию. 28.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..