Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
MySQL字符集转换_Mysql_Unicode_Character Encoding_Internationalization - Fatal编程技术网

MySQL字符集转换

MySQL字符集转换,mysql,unicode,character-encoding,internationalization,Mysql,Unicode,Character Encoding,Internationalization,我有一个数据库,其中所有文本字段和表都明确指定了“utf8”作为默认字符集,但该数据库中的数据存储为“cp1257”。我只能在使用设置名称“cp1257”或\C cp1257时显示符号。尝试在没有这些指令的情况下显示它们失败,因为它尝试以“utf8”(?)的形式获取数据。如何将数据库的所有数据(可能是备份)获取为“cp1257”,并将其恢复为有效的“utf8”?您需要先将它们转换为二进制字段,然后将字段设置为cp1257。通过这种方式,MySQL将知道字段存储在哪个字符集: ALTER TABL

我有一个数据库,其中所有文本字段和表都明确指定了“utf8”作为默认字符集,但该数据库中的数据存储为“cp1257”。我只能在使用
设置名称“cp1257”或
\C cp1257
时显示符号。尝试在没有这些指令的情况下显示它们失败,因为它尝试以“utf8”(?)的形式获取数据。如何将数据库的所有数据(可能是备份)获取为“cp1257”,并将其恢复为有效的“utf8”?

您需要先将它们转换为二进制字段,然后将字段设置为cp1257。通过这种方式,MySQL将知道字段存储在哪个字符集:

ALTER TABLE CHANGE `field` `field` BLOB;
ALTER TABLE CHANGE `field` `field` TEXT CHARACTER SET 'cp1257';
如果要更改数据的存储方式,现在可以将字段转换为任何字符集(MySQL将在此步骤中进行数据转换):


谢谢你的回答,我有很多这样的表,我能在整个数据库上进行转换而不必转换每个表(甚至每个字段)吗?你不能在SQL中进行转换,但你肯定可以在其他东西中编写脚本来生成SQL查询。看起来有点复杂,第一行不起作用,可能是因为
字段
与键(..)一起使用。我正在考虑使用mysqldump的一个技巧,我已经成功地将数据库导出到.sql文件,并且我甚至可以使用编辑器查看有效字符(如果我设置了utf-8编码选项)。所以文件是unicode。。我如何才能导入当前的数据?以通常的方式(mysql-u user-p databaseVARCHAR
,则应该使用
VARBINARY
作为转换类型。
ALTER TABLE CHANGE `field` `field` TEXT CHARACTER SET 'utf8';