Как заставить MySQL правильно обрабатывать UTF-8

StackOverflow https://stackoverflow.com/questions/202205

  •  03-07-2019
  •  | 
  •  

Вопрос

Один из ответов на вопрос, который я задал вчера предположил, что я должен убедиться, что моя база данных может корректно обрабатывать символы UTF-8.Как я могу сделать это с помощью MySQL?

Это было полезно?

Решение

Обновить:

Короткий ответ - Вы почти всегда должны использовать utf8mb4 кодировка и utf8mb4_unicode_ci сопоставление.

Чтобы изменить базу данных:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Видишь:

Оригинальный Ответ:

MySQL 4.1 и выше имеет набор символов по умолчанию UTF-8.Вы можете убедиться в этом в своем my.cnf файл, не забудьте установить и то , и другое клиент и сервер (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.

Если вы действительно хотите перенести существующие данные, не забудьте сначала создать резервную копию!Много странных операций с данными может произойти, когда все идет не так, как планировалось!

Некоторые ресурсы:

Другие советы

Чтобы сделать это "постоянным", в my.cnf:

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8

Чтобы проверить, перейдите к клиенту и покажите некоторые переменные:

SHOW VARIABLES LIKE 'character_set%';

Убедитесь, что все они utf8, за исключением ..._filesystem, который должен быть binary и ..._dir, это указывает где-то в установке MySQL.

MySQL 4.1 и выше имеет набор символов по умолчанию, который он вызывает utf8 но который на самом деле является лишь подмножеством UTF-8 (допускает только трехбайтовые символы и меньше).

Использование utf8mb4 в качестве вашей кодировки, если вы хотите "полный" UTF-8.

Короткий ответ:Использование 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 полностью

Приведенные выше ссылки содержат "подробный канонический ответ необходим для решения всех проблем".-- На этом форуме ограничено количество места.

Редактировать

В дополнение к CHARACTER SET utf8mb4 содержащий "все" символы мира, COLLATION utf8mb4_unicode_520_ci можно утверждать, что это "лучшая универсальная" сортировка для использования.(Есть также подборки на турецком, испанском и т.д. Для тех, кто хочет знать нюансы этих языков.)

Кодировка является свойством базы данных (по умолчанию) и таблицы.Вы можете посмотреть (команды 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;

Чтобы изменить кодировку набора символов на UTF-8 для самой базы данных, введите следующую команду в командной строке mysql>.ИСПОЛЬЗОВАНИЕ ALTER DATABASE..Замените DBNAME на имя базы данных:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

Это дубликат этого вопроса Как преобразовать весь набор символов базы данных MySQL и параметры сортировки в UTF-8?

Я последовал решению Хавьера, но добавил несколько других строк в свой файл.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 в первом / единственном комментарии пользователя внизу страницы.Он упоминает , что пропустить-набор символов-клиент-рукопожатие имеет некоторое значение.

Эти советы по MySQL и UTF-8 может быть полезно.К сожалению, они не представляют собой полноценного решения, а лишь общие ошибки.

Установите свой database collation Для UTF-8 затем нанесите table collation к базе данных по умолчанию.

Ваш ответ заключается в том, что вы можете настроить с помощью настроек MySQL.В моем ответе может быть что-то вырванное из контекста, но это также поможет вам узнать.
как настроить Character Set и Collation.

Для приложений, которые хранят данные с использованием набора символов MySQL по умолчанию и сортировки (latin1, latin1_swedish_ci), никакой специальной настройки не требуется.Если приложениям требуется хранение данных с использованием другого набора символов или параметров сортировки, вы можете настроить набор символов информации несколькими способами:

  • Укажите параметры символов для каждой базы данных. Например, приложениям , использующим одну базу данных, может потребоваться utf8, тогда как приложениям, которые используют другую базу данных, может потребоваться sjis.
  • Укажите настройки символов при запуске сервера. Это заставляет сервер использовать указанные настройки для всех приложений, которые не выполняют другие настройки.
  • Укажите параметры символа во время настройки, если вы создаете MySQL из исходного кода.Это заставляет сервер использовать указанные настройки для всех приложений, без необходимости указывать их при запуске сервера.

Примеры, показанные здесь для вашего вопроса по установке набора символов utf8, здесь также устанавливают параметры сортировки для большей полезности (utf8_general_ci сопоставление`).

Укажите параметры символов для каждой базы данных

  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

SET NAMES UTF8

Это делает свое дело

ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ В ФОРМАТЕ 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());

Установите для вашего подключения к базе данных значение UTF8:

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }

Смог найти решение.Выполнил следующее, как указано в 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top