Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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数据转换为utf8_Mysql_Unicode_Utf 8 - Fatal编程技术网

将拉丁文mysql数据转换为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-

我现在想使用UTF8,但我所有的数据都是拉丁文1,转换数据的有效方法是什么。我还知道如何将数据库的结构(字符集)更改为utf8,我想做的是更改现有数据的字符集

更新 这是我的老环境

  • Html输出:utf8
  • Html输入:utf8
  • Php-mysql连接:latin1
  • mysql(字段和表):latin1
  • 这是我的新设置,我希望这是创建多语言网站的最佳方式

  • Html输出:utf8
  • Html输入:utf8
  • Php-mysql连接:utf8
  • sql(字段和表):utf8

  • 您需要更改排序规则(为utf-8)。下面是一个简单的脚本。
    我有使用这个脚本的经验,它工作得很好

    您实际使用的是latin1部分,还是您的数据实际上是ASCII

    似乎有这样一个命令:

    ……但要小心,我也发现了这一点:

    如果没有执行类似的命令,另一种方法可能是将表转储到文件中,进行转换,然后重新导入该文件。(或者,如果你能说服它转储到UTF-8,那就更好了……)


    关于这一点,似乎有很多信息:

    如果您可以/想要使用存储为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,这将非常有用。我有一个完全混淆的源数据库,我怀疑他们在这里和那里更改了排序规则:)虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。