Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
对于为OAuth使用而创建的MySQL表,使用latin1而不是utf8会产生什么影响?_Mysql_Utf 8_Oauth_Innodb_Latin1 - Fatal编程技术网

对于为OAuth使用而创建的MySQL表,使用latin1而不是utf8会产生什么影响?

对于为OAuth使用而创建的MySQL表,使用latin1而不是utf8会产生什么影响?,mysql,utf-8,oauth,innodb,latin1,Mysql,Utf 8,Oauth,Innodb,Latin1,我正在共享服务器上安装OAuth支持。我尝试安装的服务器端PHP OAuth库如下: 下面是安装说明: 在注释中有一个技巧,可以使用安装包中的SQL脚本为您设置表和数据库。当我尝试通过phpMyAdmin中的导入(SQL)功能执行脚本时,在其中一个表上出现了“Key Too Long”错误。换句话说,我遇到了使用MySQL/InnoDB表时的最大密钥长度限制 为了解决这个问题,我将“charset=utf8”的所有实例替换为“charset=latin1”,因为utf8需要每个字符3个字节,

我正在共享服务器上安装OAuth支持。我尝试安装的服务器端PHP OAuth库如下:

下面是安装说明:

在注释中有一个技巧,可以使用安装包中的SQL脚本为您设置表和数据库。当我尝试通过phpMyAdmin中的导入(SQL)功能执行脚本时,在其中一个表上出现了“Key Too Long”错误。换句话说,我遇到了使用MySQL/InnoDB表时的最大密钥长度限制

为了解决这个问题,我将“charset=utf8”的所有实例替换为“charset=latin1”,因为utf8需要每个字符3个字节,而latin1是每个字符1个字节。脚本执行得很好,所有表都正确创建

就我所见,表中使用的所有字段都不需要支持多字节国际字符。我能看到问题发展的唯一方法是,如果我访问的一个OAuth连接服务在其使用者密钥或机密中使用国际字符,而我到目前为止根本没有遇到这种情况


有谁能告诉我,这个变通方法是否会在任何时候、在什么地方对我产生负面影响?另外,如果有人有更好的解决方案来解决“key too long”问题,而不牺牲utf8字符集的使用,我想知道这一点。

从技术上讲,所有字符串都必须在URL编码之前先进行utf8编码。请参阅OAuth 1.0规范第5.1节:使用[RFC3986]百分比编码(%xx)机制转义所有参数名称和值。必须对不在非保留字符集中的字符进行编码([RFC3986]第2.3节)。不得对非保留字符集中的字符进行编码。编码中的十六进制字符必须是大写。在按照[RFC3629]对文本名称和值进行百分比编码之前,必须将其编码为UTF-8八位字节


因此,如果您有任何不是ASCII(位7=0)的拉丁-1字符,那么您必须在从db中提取字符串并在OAuth协议中使用它们之前将其重新编码为UTF-8。

从技术上讲,所有字符串必须在urlencoding之前先进行utf8编码。请参阅OAuth 1.0规范第5.1节:使用[RFC3986]百分比编码(%xx)机制转义所有参数名称和值。必须对不在非保留字符集中的字符进行编码([RFC3986]第2.3节)。不得对非保留字符集中的字符进行编码。编码中的十六进制字符必须是大写。在按照[RFC3629]对文本名称和值进行百分比编码之前,必须将其编码为UTF-8八位字节


因此,如果您有任何不是ASCII(位7=0)的拉丁-1字符,那么您必须在从db中提取字符串并在OAuth协议中使用它们之前,将字符串重新编码为UTF-8。

utf8通常不需要每个字符3个字节,它需要1到5个字节,具体取决于字符。正常ASCII范围内的任何内容在utf8中都完全相同。utf8通常不需要每个字符3个字节,它需要1到5个字节,具体取决于字符。正常ASCII范围内的任何内容在utf8中都完全相同。