У меня нет большого опыта работы с наборами символов в MySQL, но у меня есть опыт работы с наборами символов в целом.
В настоящее время, когда мы вводим символы UTF8 для поля описания, мы возвращаемся '?' символы для азиатских символов в оба конца. Символы Latin1 работают просто отлично.
Поскольку ваша таблица использует latin1
для кодирования, она может хранить только те символы, которые присутствуют в наборе символов latin1. Latin1 является сокращением для ISO-8859-1, вы можете увидеть, какие символы у него - без азиатских символов, поэтому они не будут храниться. Я немного удивлен, что MySQL не выдает ошибку при таком вводе.
Имеет ли смысл использовать utf8 по умолчанию для базы данных? Есть ли какие-либо предостережения по этому поводу?
UTF-8 будет хорошим выбором, если вам нужно хранить символы из нескольких языков. UTF-8, как кодировка Unicode, позволит вам хранить любые символы Unicode (их буквально тысячи) на многих языках. Вы можете хранить строку "Dog café θλφ 你好", используя UTF-8. UTF-8 широко используется и способен кодировать практически все, что я настоятельно рекомендую.
Я бы пролистал Интернет, чтобы найти литературу по преобразованию таблиц MySQL, чтобы убедиться, что нет никаких ошибок. Если это производственные данные, протестируйте автономный набор данных - таблицу разработки или таблицу QA.
Наконец, вы, кажется, указываете на то, что в вашей БД каким-то образом хранятся полусохраненные азиатские символы. Я бы выяснил, что явно хранится : если это последовательность UTF-8 для азиатского символа, но база данных считает, что это latin1 (классический случай mojibake ), некоторое восстановление может быть возможно Я бы беспокоился, что преобразование может попытаться преобразовать кодовые блоки UTF-8, как если бы они были латиницей1, что привело бы к очень интересному выводу. Тест Тест Тест.