Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将MySQL从latin1编码更改为UTF-8_Php_Mysql_Database_Character Encoding - Fatal编程技术网

Php 将MySQL从latin1编码更改为UTF-8

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

我最近意识到我犯了一个大错误,在前端用UTF-8编码,在DB端用latin1编码

我正在考虑将MySQL数据库切换到UTF-8。是否有执行此类程序的“良好实践”?有什么建议我可以采取的步骤吗?我应该注意哪些陷阱

谢谢,, Alex

主要(也是最常见的)陷阱是希望
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