Подумай над цим:
- Ви зберігаєте дані в базі даних як
latin1
- Ви, дані, обробляються внутрішньо mysqld як
latin1
Якщо дані, що надходять з ОС або з підключення utf8
, як це mysqld обробляти?
Замість того, щоб здогадуватися чи сподіватися на краще, ви можете змінити поведінку набору символів, що надходить. За винятком information_schema
та mysql
, візьміть усі ваші бази даних і встановіть для символів за замовчуванням utf8
:
ALTER DATABASE dbname CHARACTER SET utf8;
Якщо у вас є конкретна змова, з цим вирішите:
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
Ось такі варіанти на вибір:
mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)
Ви також можете бігати
mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)
mysql>
Щоб побачити індивідуальну схему бази даних, виконайте наступне:
mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| sample | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
Щодо налаштувань, ви можете спробувати це:
Додайте рядки до my.cnf
[mysqld]
character_set_database=utf8
character_set_server=utf8
потім перезапустіть mysql
Я обговорював це ще 01 серпня 2011 року: Кодування набору символів у таблиці
CAVEAT (для серверів DB MySQL у Windows)
Ці команди
ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
не працюють у версії Windows MySQL через те, як Windows блокує файли. Викликається потрібний файл, db.opt
який знаходиться в підпапці бази даних в datadir
.
Можливо, вам доведеться зробити наступне:
- mysqldump цю базу даних (жодна база даних не створює інформацію, просто створення таблиці та ВСТАВКИ)
- скинути цю базу даних
- створити базу даних за допомогою конкретного діаграми та порівняння
- перезавантажити на звалище в нього
ЕПІЛОГ
Незалежно від того, що ви робите, будь ласка, виконайте будь-які зміни на Dev / Staging Server, щоб побачити, чи отримаєте ви бажані ефекти
ОНОВЛЕННЯ 2012-12-05 11:00 EDT
Ваші запитання
Чи варто насправді це змінити?
Щоб гарантувати правильну обробку даних, ви можете переконатися, що у вас є яблука-яблука. Дані, підготовлені як один діапазон, і завантажують їх у таблицю з базою даних, можливо, вирівнюючи дані, так, як якщо б вона бачила іншу, вона, ймовірно, не відображатиме дані з тією схемою, яку mysqld бачить при отриманні та відправленні назад до з'єднання з БД. Спробуйте завантажити базу даних на сервер Dev / Staging Server і експериментуйте з налаштуванням графіків за замовчуванням.
Чому деякі параметри за замовчуванням використовуються, utf8
але деякі використовують за замовчуванням latin1
?
Це залежало б від версії ОС MySQL Binary. Версії Windows можуть мати, latin1
хоча Linux Версії можуть використовувати utf8
.