php - 字符集和数据问题

标签 php mysql

我试图用我糟糕的英语解释整个问题:

我使用默认连接 PHP 将应用程序中的数据(以 utf8 编码)保存到数据库中( latin1 ) 到我的数据库的表 latin1作为字符集。

这不是什么大问题:例如字符串 Magnüs存储为 Magnüs ,当我恢复数据时,我正确地看到了字符串 Magnüs (因为默认连接,latin1)。

现在,我使用正确的字符集更改连接 mysql_query("SET NAMES 'utf8'", $mydb) ,而且我还更改了表字段的字符集,因此现在的值正确存储为 Magnüs在数据库上;然后我仍然看到 Magnüs当我检索数据并在我的 Web 应用程序上打印时。

当然,不幸的是,一些旧值现在打印得很糟糕( Magnüs 打印为 Magnüs )。

我想做的是用真正的编码“转换”这些旧值。

ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8;将只转换字段类型,不转换数据。

所以,一个解决方案(在互联网上发现的)应该是这样的:

ALTER TABLE table CHANGE field field BLOB;
ALTER TABLE table CHANGE field field VARCHAR(255) CHARACTER SET utf8;

但是这些旧字符串不会在数据库中更改,所以当我打印它们时在 Web 应用程序中也不会更改。

为什么?我能做什么?

最佳答案

确保您的表单发送的是 UTF-8 编码的文本,并且表格中的文本也是 UTF-8 编码的。

根据MySQL reference ,您提到的最后两个 ALTER 不会更改列内容编码,它更像是对内容的“重新解释”。

Warning The CONVERT TO operation converts column values between the character sets. This is not what you want if you have a column in one character set (like latin1) but the stored values actually use some other, incompatible character set (like utf8). In this case, you have to do the following for each such column:

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;

The reason this works is that there is no conversion when you convert to or from BLOB columns.

关于php - 字符集和数据问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773718/

相关文章:

php - 在 php 中获取 Gmail 联系人

php - excel array column double/triple/etc..辅音生成

php - 如何使用 PHP Dom 提取 innerHTML

MySQL:大数据读取速度慢

php - php 和 mysql 错误

php - Awesomium 与 .NET VS2010 (ObjectForScripting)

php - 我应该使用哪个框架来确保更好的长期升级/可维护性,CakePHP 还是 CodeIgniter?

MySQL Select 查询以根据列表值获取记录

php - 尝试从 Dreamweaver 中的登录信息写入表,结果全部显示为 1

mysql - 在JSP中创建MySQL表