Один из ответов на вопрос, который я задал вчера, предполагал, что я должен убедиться, что моя база данных может правильно обрабатывать символы UTF-8. Как я могу это сделать с MySQL?
102
Один из ответов на вопрос, который я задал вчера, предполагал, что я должен убедиться, что моя база данных может правильно обрабатывать символы UTF-8. Как я могу это сделать с MySQL?
CHARACTER SETs
; 5.1.24 испортил сопоставление немецких диез-s (ß), которое было исправлено добавлением другого сопоставления в 5.1.62 (возможно, что ухудшило положение); 5.5.3 заполнил utf8 новой кодировкой utf8mb4.utf8
. Он поддерживает только символы длиной до 3 байтов. Правильный набор символов, который вы должны использовать в MySQL, - этоutf8mb4
.Ответы:
Обновить:
Краткий ответ - вы почти всегда должны использовать
utf8mb4
кодировку иutf8mb4_unicode_ci
сопоставление.Чтобы изменить базу данных:
Видеть:
Комментарий Аарона к этому ответу Как заставить MySQL правильно обрабатывать UTF-8
В чем разница между utf8_general_ci и utf8_unicode_ci
Руководство по преобразованию: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
Оригинальный ответ:
MySQL 4.1 и выше имеет набор символов по умолчанию UTF-8. Вы можете проверить это в своем
my.cnf
файле, не забудьте установить и клиент, и сервер (default-character-set
иcharacter-set-server
).Если у вас есть данные, которые вы хотите преобразовать в UTF-8, сделайте дамп своей базы данных и импортируйте ее обратно как UTF-8, убедившись, что:
SET NAMES utf8
перед запросом / вставкой в базу данныхDEFAULT CHARSET=utf8
при создании новых таблицmy.cnf
). помните, что любые используемые вами языки (например, PHP) также должны быть UTF-8. Некоторые версии PHP будут использовать собственную клиентскую библиотеку MySQL, которая может не поддерживать UTF-8.Если вы действительно хотите перенести существующие данные, не забудьте сначала сделать резервную копию! Когда что-то пойдет не так, как планировалось, может произойти много странного измельчения данных!
Некоторые ресурсы:
источник
utf8
MySQL относится только к небольшому подмножеству полного Unicode.utf8mb4
Вместо этого вы должны использовать полную поддержку. См. Mathiasbynens.be/notes/mysql-utf8mb4 «В течение долгого времени я использовал кодировку MySQL utf8 для баз данных, таблиц и столбцов, предполагая , что она сопоставлена с описанной выше кодировкой UTF-8».latin1
иlatin1_swedish_ci
для кодировки и сортировки по умолчанию. См. Страницу «Набор символов сервера и сопоставление» в руководстве по MySQL для подтверждения: dev.mysql.com/doc/refman/5.1/en/charset-server.htmlutf8mb4
дополнительной памяти, когда большая часть текста - это ASCII. Несмотря на то, чтоchar
строки выделяются заранее,varchar
строки нет - см. Последние несколько строк на этой странице документации . Например,char(10)
будет пессимистично зарезервировать 40 байтов под utf8mb4, ноvarchar(10)
выделить байты в соответствии с кодировкой переменной длины.varchar(n)
до этогоtext
типа данных, если вы попытаетесь изменить значениеvarchar(n)
поля на размер больше допустимого байта (при выдаче предупреждения). Индекс также будет иметь нижнюю верхнюю границу наихудшего случая, и это может вызвать другие проблемы.Чтобы сделать это «постоянным», в
my.cnf
:Чтобы проверить, зайдите в клиент и покажите несколько переменных:
Убедитесь, что они все
utf8
, кроме того..._filesystem
, что должно бытьbinary
и..._dir
, что указывает где-то в установке MySQL.источник
create table my_name(field_name varchar(25) character set utf8);
utf8
"полным" UTF-8.MySQL 4.1 и выше имеет вызываемый по умолчанию набор символов,
utf8
но на самом деле это только подмножество UTF-8 (допускает только трехбайтовые символы и меньше).Используйте в
utf8mb4
качестве кодировки, если хотите "полный" UTF-8.источник
utf8
не включает символы, такие как смайлы.utf8mb4
делает. Проверьте это для получения дополнительной информации о том, как обновить: mathiasbynens.be/notes/mysql-utf8mb4Краткий ответ: Используйте
utf8mb4
в 4 местах:SET NAMES utf8mb4
или что-то подобное при установке клиентского подключения к MySQLCHARACTER SET utf8mb4
во всех таблицах / столбцах, кроме столбцов, которые имеют строго ascii / hex / country_code / zip_code / и т. д.<meta charset charset=UTF-8>
если вы выводите в HTML. (Да, здесь другое написание.)Больше информации ;
UTF8 полностью
Вышеупомянутые ссылки предоставляют «подробный канонический ответ, необходимый для решения всех проблем». - На этом форуме есть ограниченное пространство.
редактировать
В дополнение к тому, что в нем
CHARACTER SET utf8mb4
содержатся «все» символы мира,COLLATION utf8mb4_unicode_520_ci
можно утверждать, что это «лучшее универсальное» сопоставление для использования. (Есть также сопоставления на турецком, испанском и т. Д. Для тех, кому нужны нюансы на этих языках.)источник
Кодировка - это свойство базы данных (по умолчанию) и таблицы. Вы можете посмотреть (команды MySQL):
Другими словами; Проверить кодировку базы данных или изменить ее довольно легко:
источник
utf8
"полным" UTF-8.Чтобы изменить кодировку набора символов на UTF-8 для самой базы данных, введите следующую команду в командной строке mysql>. ИСПОЛЬЗОВАНИЕ
ALTER DATABASE
.. Замените DBNAME именем базы данных:Это дубликат этого вопроса. Как преобразовать весь набор символов и сопоставление базы данных MySQL в UTF-8?
источник
Я последовал решению Хавьера, но добавил несколько других строк в my.cnf:
Я нашел эту идею здесь: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html в первом / единственном комментарии пользователя внизу страницы. Он упоминает, что рукопожатие клиента с пропуском набора символов имеет некоторое значение.
источник
skip-character-set-client-handshake
был ключом.Эти советы по MySQL и UTF-8 могут быть полезны. К сожалению, они не представляют собой полного решения, это просто общие ошибки.
источник
Установите свой ,
database collation
чтобыUTF-8
затем применитьtable collation
к невыполнению базы данных.источник
Ваш ответ: вы можете настроить MySql Settings. В «Моем ответе» может быть что-то вырванное из контекста, но это также поможет вам.
как настроить
Character Set
иCollation
.utf8
, тогда как приложениям, использующим другую базу данных, может потребоваться sjis.Примеры, показанные здесь для вашего вопроса, чтобы установить набор символов utf8, здесь также установите сопоставление для большей полезности (
utf8_general_ci
сопоставление`).Укажите параметры символов для каждой базы данных
Укажите параметры персонажа при запуске сервера
Укажите параметры символов во время конфигурации MySQL
Чтобы увидеть значения системных переменных набора символов и сопоставления, которые применяются к вашему соединению, используйте эти операторы:
Это может быть длинный ответ, но есть все способы, которыми вы можете воспользоваться. Надеюсь, мой ответ будет вам полезен. для получения дополнительной информации http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
источник
SET NAMES UTF8
Это трюк
источник
SET NAMES UTF8
(илиUTF8mb4
) является правильным, вы не объясняете, что он делает (набор символов, используемый для этого соединения). «Это помогает» звучит так, как будто это решит проблему (заставить MySQL правильно обрабатывать UTF-8), но многие базы данных MySQL по умолчанию настроены на latin1, так что это не будет правильным решением. Я бы изменил кодировку по умолчанию и таблицы на utf8mb4. На самом деле, этот ответ довольно неполный, поэтому я проголосовал против.ПОДКЛЮЧЕНИЕ БАЗЫ ДАННЫХ К UTF-8
источник
Установите соединение с базой данных в UTF8:
источник
mysql_*
интерфейс. Переключитесь наmysqli_*
илиPDO
.Смогла найти решение. Выполните следующее, как указано на http://technoguider.com/2015/05/utf8-set-up-in-mysql/
источник
CHARACTER SET utf8
.root
не выполнит самого важногоinit_connect
.