Один из ответов на вопрос, который я задал вчера, предположил, что я должен убедиться, что моя база данных корректно обрабатывает символы UTF-8. Как я могу это сделать с MySQL?
Как заставить MySQL правильно обрабатывать UTF-8
Ответ 1
Обновить:
Короткий ответ - Вы почти всегда должны быть с помощью utf8mb4
кодовых и utf8mb4_unicode_ci
сверки.
Видеть:
-
Aaron комментирует этот ответ Как заставить MySQL обрабатывать UTF-8 правильно
-
Руководство по конверсии: 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
default-character-set
и default-character-set
character-set-server
).
Если у вас есть данные, которые вы хотите преобразовать в UTF-8, дамп вашей базы данных и импортируйте ее как UTF-8, убедившись:
- используйте
SET NAMES utf8
перед запросом/вставкой в базу данных - используйте
DEFAULT CHARSET=utf8
при создании новых таблиц - на данный момент ваш клиент и сервер MySQL должны находиться в UTF-8 (см.
my.cnf
). помните, что любые языки, которые вы используете (например, PHP), также должны быть UTF-8. Некоторые версии PHP будут использовать свою собственную клиентскую библиотеку MySQL, которая, возможно, не поддерживает UTF-8.
Если вы хотите перенести существующие данные, сначала помните о резервном копировании! Многие странные изменения данных могут произойти, когда все идет не так, как планировалось!
Некоторые ресурсы:
- полная миграция UTF-8 (cdbaby.com)
- статья о готовности UTF-8 к функциям php (обратите внимание, что эта часть устарела)
Ответ 2
Чтобы сделать это "постоянным", в my.cnf
:
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
Чтобы проверить, перейдите к клиенту и покажите некоторые переменные:
SHOW VARIABLES LIKE 'character_set%';
Убедитесь, что все они utf8
, кроме ..._filesystem
, который должен быть binary
и ..._dir
, который указывает где-то в установке MySQL.
Ответ 3
MySQL 4.1 и выше имеет набор символов по умолчанию, который он вызывает utf8
, но который на самом деле является только подмножеством UTF-8 (допускает только трехбайтовые символы и меньше).
Используйте utf8mb4
в качестве вашей кодировки, если вы хотите "полный" UTF-8.
Ответ 4
Короткий ответ: используйте utf8mb4
в 4 местах:
- Байт в вашем клиенте - utf8, а не latin1/cp1251/etc.
-
SET NAMES utf8mb4
или что-то подобное при установке клиентского подключения к MySQL -
CHARACTER SET utf8mb4
для всех таблиц/столбцов - кроме столбцов, которые строго соответствуют ascii/hex/country_code/zip_code/etc. -
<meta charset charset=UTF-8>
, если вы выводите HTML. (Да, написание здесь отличается.)
Дополнительная информация,
UTF8 полностью
В приведенных выше ссылках содержится "подробный канонический ответ, необходимый для решения всех проблем". - На этом форуме есть пробел.
Edit
В дополнение к CHARACTER SET utf8mb4
, содержащему "все" мировые персонажи, COLLATION utf8mb4_unicode_520_ci
является аргументом в пользу использования "наилучшего универсального" сопоставления. (Есть также турецкие, испанские и т.д., Сортировки для тех, кто хочет нюансы на этих языках.)
Ответ 5
Кодировка - это свойство базы данных (по умолчанию) и таблицы. Вы можете посмотреть (команды MySQL):
show create database foo;
> CREATE DATABASE `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */
show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1
Иными словами; достаточно легко проверить кодировку базы данных или изменить ее:
ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
Ответ 6
Чтобы изменить кодировку набора символов в UTF-8 для самой базы данных, введите следующую команду в приглашении mysql > . USE ALTER DATABASE
. Замените DBNAME именем базы данных:
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
Это дубликат этого вопроса Как преобразовать весь набор символов базы данных MySQL и сопоставление в UTF-8?
Ответ 7
Эти советы по MySQL и UTF-8 могут оказаться полезными. К сожалению, они не представляют собой полное решение, просто распространенные ошибки.
Ответ 8
Я последовал за решением Хавьера, но я добавил несколько разных строк в my.cnf:
[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8
Я нашел эту идею здесь: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html в комментарии пользователя первого или единственного пользователя в нижней части страницы. Он упоминает, что рукопожатие с пропущенным символом-клиентом имеет некоторое значение.
Ответ 9
Установите database collation
на UTF-8
затем примените table collation
к умолчанию базы данных.
Ответ 10
Ваш ответ: вы можете настроить с помощью настроек MySql. В "Моем ответе" может быть что-то вне контекста, но это также полезно для вас. как настроить Character Set
и Collation
.
Для приложений, которые хранят данные с использованием набора символов MySQL по умолчанию и сортировка (
latin1, latin1_swedish_ci
), никакой специальной конфигурации должны быть необходимы. Если приложения требуют хранения данных, используя различный набор символов или сортировку, вы можете настроить набор символов информации несколькими способами:
- Укажите настройки символов для каждой базы данных. Например, гостиницы
для использования одной базы данных может потребоваться
utf8
, тогда как приложения, которые использование другой базы данных может потребовать sjis. - Укажите настройки символа при запуске сервера. Это приводит к тому, что сервер использовать заданные настройки для всех приложений, которые не делают других меры.
- Укажите настройки символа во время настройки, если вы создаете MySQL из источника. Это заставляет сервер использовать данные настройки для всех приложений, не указывая их при запуске сервера.
Примеры, показанные здесь для вашего вопроса, чтобы установить набор символов utf8, здесь также устанавливают сопоставление для более полезного (utf8_general_ci
collation`).
Укажите настройки символов для каждой базы данных
CREATE DATABASE new_db
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
Укажите параметры символа при запуске сервера
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
Задайте настройки символов в момент конфигурации MySQL
shell> cmake . -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
Чтобы увидеть значения набора символов и системных переменных сопоставления, которые применяются к вашему соединению, используйте следующие инструкции:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
Это может быть длинный ответ, но есть способ, который вы можете использовать. Надеюсь, мой ответ будет полезен для вас. для дополнительной информации http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
Ответ 11
SET NAMES UTF8
Это трюк
Ответ 12
Установите соединение с базой данных в UTF8:
if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){
//set to utf8 encoding
mysql_set_charset('utf8',$handle);
}
Ответ 13
ПОДКЛЮЧЕНИЕ БАЗЫ ДАННЫХ К UTF-8
$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());
Ответ 14
Было возможно найти решение. Выполните следующие действия, указанные в http://technoguider.com/2015/05/utf8-set-up-in-mysql/
SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;