MySql varchar изменен с Latin1 на UTF8 - PullRequest
2 голосов
/ 23 июня 2010

В таблице mySql я использую набор символов Latin1 для хранения текста в поле varchar.Поскольку наш веб-сайт теперь поддерживается во многих странах, нам нужна поддержка UTF8.Что произойдет, если я вместо этого изменю эти поля на UTF8?Безопасно ли это делать или это испортит данные внутри этих полей?Это то, о чем мне нужно подумать при изменении поля на UTF8?

Ответы [ 2 ]

5 голосов
/ 23 июня 2010

MySQL прекрасно справляется с этим:

CREATE TEMPORARY TABLE t1 (
  c VARCHAR(10)
) CHARACTER SET ="latin1";

INSERT INTO t1 VALUES ("æøå");
SELECT * FROM t1; # 'æøå'

ALTER TABLE t1 CHARACTER SET = "utf8";
SELECT * FROM t1; # 'æøå'

DROP TEMPORARY TABLE t1;

РЕДАКТИРОВАТЬ: И нет символов латинского 1, которые не могут быть сохранены как utf-8, поэтому вы не должны получать никаких потерь данных

1 голос
/ 23 июня 2010

На фронте базы данных не должно быть никаких проблем. MySQL будет обрабатывать преобразование данных между кодировками во время внесения изменений.

Есть и другие вещи, о которых вам нужно знать, когда вы добавляете поддержку UTF-8 на свой веб-сайт.

  • Для достижения наилучших результатов вы должны убедиться, что соединения с базой данных используют UTF-8 в качестве набора символов соединения. Вы можете сделать это, введя SET NAMES utf8 при установлении соединения.
  • Вы должны убедиться, что сами ваши веб-страницы объявлены в браузере как закодированные в UTF-8, изменив метатег.
  • Соображения безопасности: вы должны проверить ввод пользователя, чтобы убедиться, что он действителен в UTF-8, чтобы избежать возможности атак с использованием межсайтового скриптинга (XSS)
...