MySQL uft8_unicode_ci
Posted
技术标签:
【中文标题】MySQL uft8_unicode_ci【英文标题】: 【发布时间】:2011-04-08 03:30:16 【问题描述】:我想确保正在写一些东西。
我的数据库表是 utf8_unicode_ci,我的网站编码和标题是 utf-8 等等。
我做了一个测试,在我的留言簿中输入了这个:
一种 ʵßăāÇϢϞﻨ☺ ▓ ▓ẻ ▓ẻṎ 现在很好,它像它应该显示在网页上一样,我测试了其他语言等,但是在 phpmyadmin 中检查它时,它在 phpmyadmin 的文本字段值区域中显示为:
一种 ʵßăÄÇϢϞﻨ☺ ▓▓ẻ▓ẻṎ ۞ݤ谁能告诉我为什么在 phpmyadmin 中会这样显示?我的意思是它是这样存储的,它是正常的还是应该完全按照我输入的方式存储?它也发生在所有外语上,如中文等。基本上都是外语。
我检查以确保并在 phpmyadmin 中显示:
mysql 连接排序规则:utf8_unicode_ci 和 MySQL 字符集:UTF-8 Unicode (utf8)
也许是 phpmyadmin?如果是这样,我必须怎么做才能让 phpmyadmin 正确显示 utf-8,或者 MySQL 没有正确存储它,尽管它在输出到网页时显示正常。
【问题讨论】:
您好,他们已经设置了这个字符集。 @Japanutf8_unicode_ci
是排序规则,而不是字符集。字符集是utf8
@col 没错,我会纠正它,顺便说一句。
【参考方案1】:
不,它不是 PhpMyAdmin。它一直都在使用 UTF-8。
您的 PHP 应用程序本身中的数据库连接可能未使用 UTF-8。尽管从一侧传输到另一侧的字节是相同的,但它们使用错误的字符集进行编码和解码,即根据Mojibake 的模式最有可能是 ISO-8859-1 的平台默认字符集字符(UTF-8 对/三元组的第一个字符通常变为 Ã
、Â
、Ä
等)。
您需要让 PHP 使用 mysql_set_charset()
通知 MySQL 您正在处理 UTF-8 数据:
mysql_set_charset("utf8");
请注意,这只适用于 PHP >= 5.2.3 和 MySQL >= 5.0.7,否则您需要执行 SET NAMES
查询,另请参阅前面链接的 PHP 手册。另请注意,您需要截断并用新数据重新填充数据库,如果不使用一些 SQL 脚本将其转换回来,您将无法在网页上重新显示它。
【讨论】:
嗨,我把你上面给出的内容放在将数据插入数据库的 mysql_query 之前,它仍然没有显示仪式。此外,我认为我不需要像 phpmyadmin 显示的那样指定: MySQL 连接排序规则:utf8_unicode_ci 和 MySQL 字符集:UTF-8 Unicode (utf8) 不确定为什么它不起作用?谢谢 如果任何东西在 PHP 端看起来“正确”,但在 DB 端却没有,那么这确实是唯一可能的原因(除非 PhpMyAdmin 本身有一些错误,但没有想到这一点,但是您应该检查其响应标头以确保安全)。你读过我后来添加的两个注释吗? 嘿,对不起,我犯了一个小错误。我自动写了UTF-8
,但它应该是utf8
(MySQL可能在这方面非常严格)。再试一次。
嗨 BalusC,我的 MySQL 版本来自 phpmyadmin:MySQL 客户端版本:5.0.51a 另外我不知道您的意思是“另请注意,您需要截断并用新数据重新填充数据库,如果不使用一些 SQL 脚本将其转换回来,您将无法在网页上重新显示它“谢谢
我很高兴得到您的帮助,每个人都非常友善,非常支持!谢谢!以上是关于MySQL uft8_unicode_ci的主要内容,如果未能解决你的问题,请参考以下文章