2016-05-25 217 views
0

不幸的是,我所有的数据库(和排序规则)都是utf8_general_ci,我最近才知道使用utf8_unicode_ci更好,因为它支持更多的Unicode字符。在数据库中转换MySQL字符集(还有Mysqli字符集相关)

如果我使用phpMyAdmin通过菜单更改排序规则和数据库表格字符集,是否会有任何问题?

另外,因为我不知道字符集的重要性,所以我没有在PHP中为我的数据库连接设置MySQLi字符集。我是否应该通过并为我的所有连接做mysqli->set_charset("utf8")?它目前默认设置为“latin1”。我认为这可能是一个问题,因为我存储为UTF8但接受latin1? (不过,我对我的HTML网页,宣布UTF8与

meta charset="utf-8" 

我也阅读它可能会更好直来直去utf8mb4?再说一遍,我不会有什么改变,与phpMyAdmin的问题,值得吗?如果我干什么去utf8mb4做我必须做的mysqli->set_charset('utf8mb4')

谢谢!我真的应该的做到了这一点,开始。

回答

0

CHARACTER SET是字节编码COLLATION是如何对字符进行比较(WHEREORDER BY)。

在构建表之后,无法对其中的任何一项进行平凡的更改。相反,您需要执行某种形式的ALTER,可能是ALTER ... CONVERT TO ...

字符集utf8mb4具有处理所有中文(utf8缺少一些字符)和表情符号(较新的表情符号)的优点。

核对utf8_unicode_520_ci(或utf8mb4_unicode_520_ci字符集utf8mb4)是基于更新的Unicode标准,因此可以说是“最好的”可用的在MySQL。

所以,是的,

  1. ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci;
  2. 连接之后mysqli->set_charset('utf8mb4');
  3. 在HTML中,有<meta charset=UTF-8>

有一个机会,CONVERT TO会遇到 “重复键”,因为_unicode_归类的工作不同于* _general_ci。这不会发生在英国,并且不会发生在欧洲大部分地区。想到两个例外:德文ß在某些UNIQUEPRIMARY列,以及任何由'非间距'重音和字母组成的重音字母。 (后者非常罕见。)