如何将多个不兼容的字符集传递给mySQL?
考虑以下场景:有一个SQL表,其中包含多个相互不兼容的字符集中的数据。一个示例是一个表,其中一列为拉丁语-1,一列为KOR,一列为JIS 虽然此示例可能不适合此附加要求,但假设暂时不存在包含所有三列中使用的所有符号的字符集。例如,如何在此处高效地输入新数据 到SQL数据库的连接拥有自己的字符集,可以使用语句对其进行修改,但显然,单个字符集中的任何简单命令都不足以在一个语句中输入一行数据如何将多个不兼容的字符集传递给mySQL?,sql,character-encoding,Sql,Character Encoding,考虑以下场景:有一个SQL表,其中包含多个相互不兼容的字符集中的数据。一个示例是一个表,其中一列为拉丁语-1,一列为KOR,一列为JIS 虽然此示例可能不适合此附加要求,但假设暂时不存在包含所有三列中使用的所有符号的字符集。例如,如何在此处高效地输入新数据 到SQL数据库的连接拥有自己的字符集,可以使用语句对其进行修改,但显然,单个字符集中的任何简单命令都不足以在一个语句中输入一行数据 我意识到使用许多遗留字符集,特别是对于web应用程序,不是推荐的做法。但是,这个问题对于较旧或继承的软件仍然非
我意识到使用许多遗留字符集,特别是对于web应用程序,不是推荐的做法。但是,这个问题对于较旧或继承的软件仍然非常相关。使用介绍人 通过使用特殊的“介绍人”变量,可以在同一语句中组合多个字符集。例如,发送到SQL数据库:
INSERT INTO `table` (`row1`, `row2`) VALUES (_sjis'<S1>', _cp1250'<S2>');
只要我们注意不要更改对quote()
和query()
的调用之间的底层连接的字符集,就不应该存在任何注入漏洞
注释
这个答案是我对如何做到这一点的最佳猜测,但可能存在更好的方法 有什么原因不能将所有数据存储为UTF-8并将不同的列从输入/输出的不同编码转换为不同编码吗?@rd_nielsen在大多数情况下,UTF-8会覆盖您。可能会出现一些边缘情况,但情况并非如此(脑海中会浮现出中日韩表意文字/汉族统一问题)。
ERROR 1366 (HY000): Incorrect string value: '<data>' for column '<column>' at row <row>
// Assume $PDO is a PDO object, $shiftjis_string is our JIS string,
// and $cp1250_string is a string in CP1250.
$v1 = $PDO->quote($shiftjis_string);
$v2 = $PDO->quote($cp1250_string);
$query = "INSERT INTO `table` (`row1`, `row2`) VALUES _sjis'{$v1}', _cp1250'{$v2}'; ";
$result = $PDO->query($query);