当我启动我的网站时,我将所有表格列设置为“utf8_general_ci”,认为这会使所有内容都以UTF8存储。
根据PHP中的mysql_client_encoding()函数,我一直在使用latin1进行连接。
我知道这不是一个新问题。我的问题是如何正确更新我的数据库以使其utf8并且不影响我的表中存在的数据?
StackOverflow有很多答案,但很多我觉得含糊不清。一些更有帮助的是:
查询所有数据并更新为UTF8 https://stackoverflow.com/a/2335254/158126
使用构建的脚本来转换表https://stackoverflow.com/a/13400547/158126
根据您的经验,您如何解决此问题并将所有用户数据保留在MySQL表中?
答案 0 :(得分:1)
根据您的情况,我建议您尝试关注每个坏列(通过utf8连接进行连接):
// create a new column to store the latin1
alter table <table> add <column-latin1> <length> character set latin1;
// copy the utf8 data into the latin1 column without charset conversion
update <table> set <column-latin1> = binary <column-utf8>;
// verify the latin1 data looks OK
select <column-latin1> from <table>;
// copy the latin1 column into the utf8 column WITH charset conversion
update <table> set <column-utf8> = <column-latin1>;
// verify the new, properly encoded UTF8 data looks OK
select <column-latin1> from <table>;
// remove the temporary columns
alter <table> drop <column-latin1>;
并将您的客户端设置为使用UTF8连接。