在数据库中转换MySQL Charset(也与Mysqli Charset相关)

时间:2016-05-25 22:17:07

标签: php mysql mysqli utf-8 character-encoding

不幸的是我的所有数据库(和排序规则)都是utf8_general_ci,我最近才知道最好使用utf8_unicode_ci,因为它准确地支持更多的Unicode字符。

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

另外因为我不知道字符集的重要性,我没有在PHP中为我的数据库连接设置MySQLi字符集。我是否应该通过mysqli->set_charset("utf8")进行所有联系?默认情况下,它目前设置为“latin1”。我认为这可能是一个问题,因为我存储为UTF8但接受latin1? (但我在我的html页面上用

声明了UTF8
 meta charset="utf-8" 

我也读过,直接去utf8mb4可能会更好?再次,我是否有任何问题改变与phpMyAdmin,它是否值得?如果我去utf8mb4我是否必须mysqli->set_charset('utf8mb4')

谢谢!我真的应该这样做才能开始。

谢谢!

1 个答案:

答案 0 :(得分:0)

CHARACTER SET是字节的编码COLLATION是比较字符的方式(WHEREORDER BY)。

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

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

归类 utf8_unicode_520_ci(或utf8mb4_unicode_520_ci用于字符集utf8mb4)基于较新的Unicode标准,因此它可以说是MySQL中的“最佳”。 / p>

所以,是的,

  1. ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci;
  2. 在连接后立即
  3. mysqli->set_charset('utf8mb4');
  4. 在HTML中,有<meta charset=UTF-8>
  5. CONVERT TO有可能遇到“重复密钥”,因为 _unicode _ 归类与* _general_ci的工作方式不同。英语不会发生这种情况,欧洲大部分地区也不会发生这种情况。我会想到两个例外:某些ßUNIQUE列中的德语PRIMARY,以及由“非间距”重音和字母组成的任何重音字母。 (后者非常罕见。)