Как я могу преобразовать весь набор символов базы данных MySQL в UTF-8 и сопоставление в UTF-8?
mysql
character-encoding
декан
источник
источник
utf8_unicode_ci
, а неutf8_general_ci
.utf8mb4
а не вutf8
качествеutf8
поддерживает только базовую многоязычного плоскость , в отличие от полного диапазона. Требуется MySQL 5.5.3 или выше.utf8mb4
вам также нужно будет переключить сортировку наutf8mb4_unicode_ci
utf8mb4_unicode_520_ci
или какая-либо последняя доступная версия.Ответы:
Используйте
ALTER DATABASE
иALTER TABLE
команду.Или, если вы все еще используете MySQL 5.5.2 или более раннюю версию, которая не поддерживает 4-байтовый UTF-8, используйте
utf8
вместоutf8mb4
:источник
CONVERT TO
Методика предполагает , что текст был правильно храниться в какой - либо другой кодировке (например, latin1), а не подогнаны (например, UTF-8 байт забиты в latin1 колонку без преобразования в latin1).Сделайте резервную копию!
Затем вам нужно установить наборы символов по умолчанию в базе данных. Это не преобразует существующие таблицы, оно только устанавливает значения по умолчанию для вновь создаваемых таблиц.
Затем вам нужно будет преобразовать набор символов для всех существующих таблиц и их столбцов. Это предполагает, что ваши текущие данные находятся в текущем наборе символов. Если для ваших столбцов задан один набор символов, но ваши данные действительно хранятся в другом, вам нужно будет обратиться к руководству по MySQL, чтобы узнать, как это сделать.
источник
utf8_general_ci
больше не рекомендуется лучшая практика. Начиная с MySQL 5.5.3, вы должны использовать,utf8mb4
а неutf8
. Они оба ссылаются на кодировку UTF-8, но в старыхutf8
были ограничения, специфичные для MySQL, которые не позволяли использовать символы, перечисленные выше0xFFFD
.В командной строке
Если вы один из командной строки, вы можете сделать это очень быстро. Просто заполните "dbname": D
Один вкладыш для простого копирования / вставки
источник
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DB="dbname"
DB="db_name"; ( echo 'ALTER DATABASE
'"$ DB"' `CHARACTER SET utf8 COLLATE utf8_general_ci; '; mysql --uuser -ppassword -hhost "$ DB" -e "ПОКАЗАТЬ ТАБЛИЦЫ" --batch --skip-column-names | xargs -I {} echo 'SET foreign_key_checks = 0; ALTER TABLE'{}'
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ' ) | mysql -uuser -ppassword -hhost "$ DB" `Вы можете создать sql для обновления всех таблиц:
Захватите выход и запустите его.
Ответ Арнольда Дэниелса выше более элегантен.
источник
WHERE TABLE_SCHEMA=webdb_playground
привело к неизвестной ошибке столбца, ноWHERE TABLE_SCHEMA="webdb_playground"
было бы успешным. Что-то, чтобы попробовать на случай, если кто-то еще столкнется с этим.Прежде чем продолжить, убедитесь, что вы: завершили полное резервное копирование базы данных!
Шаг 1: Изменения уровня базы данных
Определение сопоставления и набора символов вашей базы данных
Исправление сопоставления для базы данных
Шаг 2: Изменения на уровне таблицы
Идентификация таблиц базы данных с неправильным набором символов или сопоставлением
Настройка сортировки столбцов таблицы и набора символов
Захватите верхний вывод sql и запустите его. (вроде следующего)
обратитесь к: https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL+Database
источник
Используйте HeidiSQL . Это бесплатный и очень хороший инструмент БД.
В меню инструментов войдите в редактор Bulk Table
Выберите полную базу данных или выберите таблицы для преобразования,
казнить
Это преобразует полную базу данных из латинского в utf8 всего за несколько секунд.
Работает как шарм :)
HeidiSQL подключается по умолчанию как utf8, поэтому любые специальные символы теперь должны рассматриваться как символы (ø å), а не как закодированные при проверке данных таблицы.
Настоящая проблема при переходе с латиницы на utf8 заключается в том, чтобы убедиться, что pdo соединяется с utf8 charset. Если нет, вы получите мусорные данные, вставленные в таблицу utf8 и вопросительные знаки повсюду на вашей веб-странице, заставляя вас думать, что данные таблицы не являются utf8 ...
источник
Вдохновленный комментариями @sdfor, вот скрипт bash, который делает эту работу
источник
Если данные не совпадают с набором символов, вы можете рассмотреть этот фрагмент из http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html.
Вот пример:
Убедитесь, что вы выбрали правильное сопоставление, иначе вы можете получить уникальные конфликты ключей. например, Элеонора и Элеонора могут считаться одинаковыми в некоторых сопоставлениях.
В стороне:
У меня была ситуация, когда определенные символы «ломались» в электронных письмах, даже если они были сохранены в базе данных как UTF-8. Если вы отправляете электронные письма с использованием данных utf8, вы можете также преобразовать свои электронные письма в UTF8.
В PHPMailer просто обновите эту строку:
public $CharSet = 'utf-8';
источник
Для баз данных с большим количеством таблиц вы можете использовать простой скрипт php, чтобы обновить кодировку базы данных и всех таблиц, используя следующее:
источник
источник
источник
Самый безопасный способ - сначала изменить столбцы на двоичный тип, а затем изменить его обратно на тип, используя желаемую кодировку.
Каждый тип столбца имеет свой соответствующий двоичный тип, как показано ниже:
Например.:
Я попробовал в нескольких латинских таблицах, и это сохранило все диакритические знаки.
Вы можете извлечь этот запрос для всех столбцов, которые делают это:
После того, как вы сделаете это для всех ваших столбцов, вы сделаете это для всех таблиц:
Чтобы сгенерировать этот запрос для всей вашей таблицы, используйте следующий запрос:
И теперь, когда вы изменили все свои столбцы и таблицы, сделайте то же самое с базой данных:
источник
Если вы не можете преобразовать свои таблицы или если для вашей таблицы всегда задан какой-либо набор символов, отличных от utf8, но вы хотите использовать utf8, лучше всего было бы стереть его и начать все заново, явно указав:
источник
Единственное решение, которое сработало для меня: http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8
Преобразование базы данных, содержащей таблицы
источник
изменить таблицу table_name charset = 'utf8';
Это простой запрос, который я смог использовать в моем случае, вы можете изменить имя_таблицы в соответствии с вашими требованиями.
источник
Чтобы изменить кодировку набора символов на UTF-8 для самой базы данных, введите следующую команду в приглашении mysql>. Замените DBNAME именем базы данных:
источник
Вы также можете использовать инструмент БД Navicat, который делает это проще.
Щелкните правой кнопкой мыши по вашей базе данных и выберите Свойства базы данных и измените ее в раскрывающемся списке
источник
Решение командной строки и исключение представлений
Я просто заполняю ответ @ Jasny для других, таких как
@Brian
я, и у которых есть представления в нашей базе данных.Если у вас есть такая ошибка:
Это потому, что у вас, вероятно, есть представления, и вам нужно их исключить. Но при попытке их исключить MySQL возвращает 2 столбца вместо 1.
Поэтому мы должны адаптировать команду Jasny
awk
для извлечения только 1-го столбца, который содержит имя таблицы.Один вкладыш для простого копирования / вставки
источник
Чтобы изменить кодировку набора символов на UTF-8, выполните простые шаги в PHPMyAdmin.
Выберите вашу базу данных
Перейти к операции
источник