将拉丁文mysql数据转换为utf8
我现在想使用UTF8,但我所有的数据都是拉丁文1,转换数据的有效方法是什么。我还知道如何将数据库的结构(字符集)更改为utf8,我想做的是更改现有数据的字符集 更新 这是我的老环境将拉丁文mysql数据转换为utf8,mysql,unicode,utf-8,Mysql,Unicode,Utf 8,我现在想使用UTF8,但我所有的数据都是拉丁文1,转换数据的有效方法是什么。我还知道如何将数据库的结构(字符集)更改为utf8,我想做的是更改现有数据的字符集 更新 这是我的老环境 Html输出:utf8 Html输入:utf8 Php-mysql连接:latin1 mysql(字段和表):latin1 这是我的新设置,我希望这是创建多语言网站的最佳方式 Html输出:utf8 Html输入:utf8 Php-mysql连接:utf8 sql(字段和表):utf8 您需要更改排序规则(为utf-
您需要更改排序规则(为utf-8)。下面是一个简单的脚本。
我有使用这个脚本的经验,它工作得很好您实际使用的是latin1部分,还是您的数据实际上是ASCII 似乎有这样一个命令:
关于这一点,似乎有很多信息:如果您可以/想要使用存储为latin1的数据,但只想将其表示为UTF-8,那么将UTF-8指定为连接字符集也应该有效。测试这一点的一种方法是发出查询
SET NAMES 'utf8'
建立连接后,在读取/写入任何数据之前
这里有更多详细信息从旧数据库创建名为dbname\u new的新数据库的最佳解决方案 然后获取该转储并用新的utf8数据替换字符集信息,并确保将sql文件本身重新保存为utf8 然后将其加载回新的数据库,检查一切正常,然后重命名它
这可能是一个漫长的网络过程,因此我建议您通过ssh shell会话完成,并充分利用bash管道等功能。关于此主题的优秀资源: 如果将utf8_encode()应用于已存在的utf8字符串,它将返回一个乱码utf8输出 我做了一个函数来解决所有这些问题。它被称为forceUTF8() 您不需要知道字符串的编码是什么。它可以是拉丁文1(iso 8859-1)或UTF8,或者字符串可以是两者的混合。forceUTF8()将所有内容转换为UTF8 我这样做是因为一个服务给了我一个混乱的数据源,在同一个字符串中混合了UTF8和Latin1 用法:
$utf8_string = forceUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = forceLatin1($utf8_or_latin1_or_mixed_string);
$utf8_string = fixUTF8($garbled_utf8_string);
我包含了另一个函数fixUFT8(),它将修复每个看起来乱码的UTF8字符串
用法:
$utf8_string = forceUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = forceLatin1($utf8_or_latin1_or_mixed_string);
$utf8_string = fixUTF8($garbled_utf8_string);
示例:
echo fixUTF8("Fédération Camerounaise de Football");
echo fixUTF8("Fédération Camerounaise de Football");
echo fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo fixUTF8("Fédération Camerounaise de Football");
将输出:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
更新:我将theese转换成了一个静态类,他们现在住在Github中:
我不想将数据存储为拉丁文1,我想将其转换您链接的脚本说它不会转换数据,但它看起来仍然很有趣/相关。谢谢Sebastián,这将非常有用。我有一个完全混淆的源数据库,我怀疑他们在这里和那里更改了排序规则:)虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。