Набор символов, кодирование в таблице
-
16-10-2019 - |
Вопрос
У меня есть следующие данные:Trollhättan
Если я распечатаю и настраиваю заголовок на
utf-8
, тогда это выход в браузере.Если я не настраиваю
utf-8
в заголовке,Trollhättan
. Анкет Однако, когда я храню данные в базе данных и проверяюphpmyadmin
, Я получаю следующую строку: Trollhãttan.Когда я настраиваю заголовок на
utf-8
, Я получаю эту строку:Trollhättan
Кроме тогоTrollhättan
.
Поскольку таблица latin1_swedish_ci
, мне нужно использовать в таблице UTF-8
?
Решение
Вот список коллекций в UTF-8
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)
latin1_swedish_ci
принадлежит латинскому1
mysql> select * from information_schema.collations where COLLATION_NAME = 'latin1_swedish_ci';
+-------------------+--------------------+----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+-------------------+--------------------+----+------------+-------------+---------+
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
+-------------------+--------------------+----+------------+-------------+---------+
1 row in set (0.03 sec)
Самый близкий UTF8 для вашего сбора - ID 200
mysql> select * from information_schema.collations where ID = 200;
+-----------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+-----------------+--------------------+-----+------------+-------------+---------+
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
+-----------------+--------------------+-----+------------+-------------+---------+
1 row in set (0.00 sec)
ПРЕДОСТЕРЕЖЕНИЕ
Возможно, вам придется экспериментировать с Latin1, изменить набор символов и сопоставление отдельного столбца в таблице или, возможно, оба. По крайней мере, используйте Latin1 для отображения в PhpMyAdmin.
Вы можете поэкспериментировать с тем, чтобы сделать всю базу данных определенным набором символов и сопоставлением с использованием Изменять базу данных.
ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
Убедитесь, что вы сделаете резервную копию базы данных и загрузите ее в DEV/Pating DB, а затем запустите ALTER BATABASE против DEV/PETAGING.
Другие советы
Вы должны убедиться, что когда вы "храните данные в базе данных", клиент Вы используете, использует UTF8. Затем установление заголовка HTTP в UTF8 завершает поездку туда и обратно.
Удивительно, что не имеет большого значения, какой набор символов используется в базе данных (хотя это вполне может быть удобно для того, чтобы быть UTF8).