Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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?_Sql_Character Encoding - Fatal编程技术网

如何将多个不兼容的字符集传递给mySQL?

如何将多个不兼容的字符集传递给mySQL?,sql,character-encoding,Sql,Character Encoding,考虑以下场景:有一个SQL表,其中包含多个相互不兼容的字符集中的数据。一个示例是一个表,其中一列为拉丁语-1,一列为KOR,一列为JIS 虽然此示例可能不适合此附加要求,但假设暂时不存在包含所有三列中使用的所有符号的字符集。例如,如何在此处高效地输入新数据 到SQL数据库的连接拥有自己的字符集,可以使用语句对其进行修改,但显然,单个字符集中的任何简单命令都不足以在一个语句中输入一行数据 我意识到使用许多遗留字符集,特别是对于web应用程序,不是推荐的做法。但是,这个问题对于较旧或继承的软件仍然非

考虑以下场景:有一个SQL表,其中包含多个相互不兼容的字符集中的数据。一个示例是一个表,其中一列为拉丁语-1,一列为KOR,一列为JIS

虽然此示例可能不适合此附加要求,但假设暂时不存在包含所有三列中使用的所有符号的字符集。例如,如何在此处高效地输入新数据

到SQL数据库的连接拥有自己的字符集,可以使用语句对其进行修改,但显然,单个字符集中的任何简单命令都不足以在一个语句中输入一行数据


我意识到使用许多遗留字符集,特别是对于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);