不幸的是我的所有数据库(和排序规则)都是utf8_general_ci
,我最近才知道最好使用utf8_unicode_ci
,因为它准确地支持更多的Unicode字符。
如果我使用phpMyAdmin通过菜单更改排序规则和数据库表格字符集会有任何问题吗?
另外因为我不知道字符集的重要性,我没有在PHP中为我的数据库连接设置MySQLi字符集。我是否应该通过mysqli->set_charset("utf8")
进行所有联系?默认情况下,它目前设置为“latin1”。我认为这可能是一个问题,因为我存储为UTF8但接受latin1? (但我在我的html页面上用
meta charset="utf-8"
我也读过,直接去utf8mb4可能会更好?再次,我是否有任何问题改变与phpMyAdmin,它是否值得?如果我去utf8mb4
我是否必须mysqli->set_charset('utf8mb4')
?
谢谢!我真的应该这样做才能开始。
谢谢!
答案 0 :(得分:0)
CHARACTER SET
是字节的编码。 COLLATION
是比较字符的方式(WHERE
和ORDER BY
)。
在构建表之后,您无法轻易地更改其中任何一个。相反,您需要执行某种形式的ALTER
,可能是ALTER ... CONVERT TO ...
。
字符集 utf8mb4
具有处理所有中文(utf8缺少某些字符)和表情符号(较新的表情符号)的优势。
归类 utf8_unicode_520_ci
(或utf8mb4_unicode_520_ci
用于字符集utf8mb4)基于较新的Unicode标准,因此它可以说是MySQL中的“最佳”。 / p>
所以,是的,
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci;
mysqli->set_charset('utf8mb4');
。<meta charset=UTF-8>
CONVERT TO
有可能遇到“重复密钥”,因为 _unicode _ 归类与* _general_ci的工作方式不同。英语不会发生这种情况,欧洲大部分地区也不会发生这种情况。我会想到两个例外:某些ß
或UNIQUE
列中的德语PRIMARY
,以及由“非间距”重音和字母组成的任何重音字母。 (后者非常罕见。)