我在我的网站上使用UTF-8
编码。最近我一直在我的MySQL表中存储中文/西班牙语/俄语名称,然后在用UTF-8字符集生成的页面上用PHP打印它们。页面工作正常,我正确地看到所有字母。但是,我刚刚意识到我的表设置了latin1_swedish_ci
charset。即使我使用latin1_swedish_ci
字符集存储这些名称,使用UTF-8在我的网站上提供这些名称仍然可以正确显示它们怎么可能?
谢谢!
乔尔
答案 0 :(得分:2)
因为mysql连接仍在使用latin1
,所以
您应该将这些数据视为UTF-8,但存储在latin1环境中。
所以,为了证明这一点,
show variables like '%char%';
以上应该返回的大部分设置都在latin1
中应用
set names utf8;
你会看到所有的UTF-8都变成了双重编码(乱码)
答案 1 :(得分:1)
你会对线程感兴趣: A script to change all tables and fields to the utf-8-bin collation in MYSQL
他们正在处理那些修复你所做过的事情的方法。
请注意,在主键中使用时,以utf8编码的varchar的大小会计算三倍,因此单个主键列的最大长度为varchar(333)。