Php 将MySQL从latin1编码更改为UTF-8
我最近意识到我犯了一个大错误,在前端用UTF-8编码,在DB端用latin1编码 我正在考虑将MySQL数据库切换到UTF-8。是否有执行此类程序的“良好实践”?有什么建议我可以采取的步骤吗?我应该注意哪些陷阱 谢谢,, Alex主要(也是最常见的)陷阱是希望Php 将MySQL从latin1编码更改为UTF-8,php,mysql,database,character-encoding,Php,Mysql,Database,Character Encoding,我最近意识到我犯了一个大错误,在前端用UTF-8编码,在DB端用latin1编码 我正在考虑将MySQL数据库切换到UTF-8。是否有执行此类程序的“良好实践”?有什么建议我可以采取的步骤吗?我应该注意哪些陷阱 谢谢,, Alex主要(也是最常见的)陷阱是希望ALTER DATABASE…DEFAULT CHARACTER SET或ALTER TABLE…DEFAULT CHARACTER SET将更改现有列的编码 这些语句仅影响在发出这些语句后创建的表和列 您应该使用分别更改每个表 ALTER
ALTER DATABASE…DEFAULT CHARACTER SET
或ALTER TABLE…DEFAULT CHARACTER SET
将更改现有列的编码
这些语句仅影响在发出这些语句后创建的表和列
您应该使用分别更改每个表
ALTER TABLE mytable CONVERT TO CHARACTER SET UTF8;
我从我的书签里找到了这个。它有点旧,但可能仍然适合您的需要:
我在互联网上发现了一个技巧(所以它不是我的,但我忘了从哪里得到的),使用一个缺少编码的转储文件,然后用正确的编码重新导入“空白”转储文件
仅当表中的所有数据确实采用正确的编码(用于重新导入)时才有帮助
否则,您将丢失数据:在第一个非法编码字符之后,每个字段值都将被截断
我是为这个角色买的。还是没办法。应该是可行的像“忽略工作字符”或类似的东西,我认为
latin1格式的MsSQL表的utf-8编码内容(对于linux shell)的示例步骤如下:
mysqldump--opt--quote name--skip set charset--default character set=latin1 mydatabase>/tmp/dump.sql
mysql——默认字符集=utf8 mydatabase
这会破坏所有非拉丁字符,不是吗?@colshrapanel:如果他们找到进入latin1
专栏的方法,肯定会Latin1
是UTF8
@colshrapanel的一个子集:您能说出一个在Latin1
中但不在UTF8
中的字符吗?如果试图在latin1
列中插入非拉丁文字符,将导致出现警告字符串值不正确
,并将该字符替换为?
符号。@colshrapel:请尝试在latin1
表中插入俄文字符,看看会发生什么。使用您想要的任何客户端编码。@colshrapanel:Show,not tell。请尝试在latin1
表格中插入俄语字符。然后贴一个垃圾堆。
mysqldump --opt --quote-names --skip-set-charset --default-character-set=latin1 mydatabase > /tmp/dump.sql
mysql --default-character-set=utf8 mydatabase < /tmp/dump.sql