Как заставить MySQL правильно обрабатывать UTF-8
В одном из ответов на a question I asked yesterday предлагалось убедиться, что 9X_mysql-server моя база данных может правильно обрабатывать 9X_mysqldump символы UTF-8. Как я могу это сделать с 9X_utf8-decode MySQL?
- Этот вопрос полностью совпадает с этим ... Посмотрите, пожалуйста, на этот ...
Ответ #1
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
Обновление:
Краткий ответ. Практически всегда следует 9X_mysqld использовать кодировку utf8mb4
и параметры сортировки 9X_mysqldump utf8mb4_unicode_ci
.
Чтобы изменить базу данных:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
См .:
-
Комментарий 9X_mysql-table Аарона к этому ответу How to make MySQL handle UTF-8 properly
-
What's the difference between utf8_general_ci and utf8_unicode_ci
-
Руководство по преобразованию: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
Исходный ответ:
MySQL 9X_mysql-if 4.1 и выше имеет набор символов по умолчанию 9X_mysqlclient UTF-8. Вы можете проверить это в своем файле 9X_mysql-query my.cnf
, не забудьте установить и клиент, и сервер 9X_mysqldump (default-character-set
и character-set-server
).
Если у вас есть данные, которые вы 9X_mysql-table хотите преобразовать в UTF-8, сделайте дамп 9X_utf-8 своей базы данных и импортируйте ее обратно 9X_mysqlsh как UTF-8, убедившись, что:
- используйте
SET NAMES utf8
перед запросом / вставкой в базу данных - используйте
DEFAULT CHARSET=utf8
при создании новых таблиц - на этом этапе ваш клиент и сервер MySQL должны быть в UTF-8 (см.
my.cnf
). помните, что любые используемые вами языки (например, PHP) также должны быть UTF-8. Некоторые версии PHP будут использовать собственную клиентскую библиотеку MySQL, которая может не поддерживать UTF-8.
Если вы действительно 9X_mysql-server хотите перенести существующие данные, не 9X_mysqlclient забудьте сначала сделать резервную копию! Когда 9X_mysql-table что-то пойдет не так, как планировалось, может 9X_my-sql произойти много странного измельчения данных!
Некоторые 9X_my-sql ресурсы:
- complete UTF-8 migration (cdbaby.com)
- статья на UTF-8 readiness of php functions (обратите внимание, что часть этой информации устарела)
- В MySQL никогда не было набора символов по умолчанию UTF-8. 4.1 и 5.x до последней версии 5.7 используют latin1 и latin1_swedish_ci для кодировки по умолчанию и сопоставления. См. Страницу «Набор симво ...
Ответ #2
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
Чтобы сделать это «постоянным», в my.cnf
:
[client] default-character-set=utf8 [mysqld] character-set-server = utf8
Для проверки 9X_utf-8 перейдите к клиенту и покажите несколько 9X_mysqldump переменных:
SHOW VARIABLES LIKE 'character_set%';
Убедитесь, что все они utf8
, за исключением 9X_utf-8 ..._filesystem
, который должен быть binary
и ..._dir
, который указывает 9X_mysql-server где-то в установке MySQL.
- Это не так. То, что MySQL называет `utf8`, не является" полн ...
Ответ #3
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
MySQL 4.1 и выше имеет набор символов по 9X_mysql-if умолчанию, который он вызывает utf8
, но который 9X_mysql-server на самом деле является только подмножеством 9X_my-sql UTF-8 (допускает только трехбайтовые символы 9X_mysql-server и меньше).
Используйте utf8mb4
в качестве кодировки, если 9X_mysql-query вы хотите "полный" UTF-8.
- В стороне, я хотел бы сделать паузу и пристально взглянуть на команду MySQL. о_о Вы что, ребята думали? Вы понимаете, сколько путаницы вы посеяли, создав в своей программе кодовую страницу под названием «utf8», которая на самом деле не являет ...
Ответ #4
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
Краткий ответ: используйте utf8mb4
в 4 местах:
- В вашем клиенте используются байты utf8, а не latin1 / cp1251 / и т. д.
SET NAMES utf8mb4
или что-то подобное при установлении соединения клиента с MySQLCHARACTER SET utf8mb4
для всех таблиц / столбцов, кроме столбцов, которые имеют строго ascii / hex / country_code / zip_code / и т. д.-
, если вы выводите в HTML. (Да, здесь другое написание.)
More info;
UTF8 all the way
Приведенные 9X_mysqlsh выше ссылки предоставляют "подробный 9X_mysqlsh канонический ответ, необходимый для решения 9X_mysqldump всех проблем". - На этом форуме ограничено 9X_mysql-query пространство.
Изменить
Помимо CHARACTER SET utf8mb4
, содержащего «все» символы 9X_mysql-if мира, можно утверждать, что COLLATION utf8mb4_unicode_520_ci
является «лучшим 9X_mysqlclient универсальным» сопоставлением для использования. (Есть 9X_mysqlclient также сопоставления на турецком, испанском 9X_mysql-if и т. Д. Для тех, кому нужны нюансы на этих 9X_mysql-server языках.)
Ответ #5
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
Кодировка - это свойство базы данных (по 9X_mysqlsh умолчанию) и таблицы. Вы можете посмотреть 9X_utf-8 (команды 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
Другими словами; проверить 9X_utf8-decode кодировку базы данных или изменить ее довольно 9X_my-sql легко:
ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
- Это не так. То, что MySQL называет `utf8`, не являе ...
Ответ #6
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
Я последовал решению Хавьера, но добавил 9X_mysql несколько других строк в my.cnf:
[myslqd] skip-character-set-client-handshake collation_server=utf8_unicode_ci character_set_server=utf8
Я нашел 9X_mysql-if эту идею здесь: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html в первом / единственном 9X_mysql-query комментарии пользователя внизу страницы. Он 9X_utf8-decode упоминает, что skip-character-set-client-handshake имеет некоторое значение.
- Этот нелюбимый ответ без голосования был единственным, что мне ...
Ответ #7
Ответ на вопрос: Как заставить MySQL правильно обрабатывать UTF-8
Чтобы изменить кодировку набора символов 9X_mysql-query на UTF-8 для самой базы данных, введите 9X_mysql-table следующую команду в командной строке mysql>. ИСПОЛЬЗУЙТЕ 9X_utf-8 ALTER DATABASE
.. Замените DBNAME именем базы данных:
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
Это 9X_mysqlsh дубликат этого вопроса How to convert an entire MySQL database characterset and collation to UTF-8?
-
7
-
13
-
6
-
7
-
5
-
10
-
14
-
4
-
8
-
3
-
7
-
4
-
5
-
2
-
4
-
4
-
3
-
7
-
14
-
6
-
8
-
5
-
1
-
1
-
4
-
2
-
3
-
3
-
2
-
7
-
20
-
1
-
2
-
4
-
1
-
5
-
4
-
3
-
6
-
4
-
4
-
4
-
4
-
1
-
2
-
1
-
3
-
2
-
6
-
3