西欧语言mysql查询问题

西欧语言mysql查询问题,mysql,character-encoding,Mysql,Character Encoding,我正在编写一个网页,用户可以上传自己的画廊。执行此操作时,系统会为与库同名的图像创建一个子文件夹,对库的引用将作为行添加到表中,并为库创建一个单独的表,其中包含图像列表 当我尝试创建一个新的画廊时,只要没有西欧标志,一切都很好。例如,如果我将库命名为“beär”,我将得到一个错误,“Table'databasename.beÃr..”不存在 但是,该表确实存在且名称正确, 在mysql查询返回错误之前,我已经尝试打印出变量$sub(表示查询中的库名称),它正确打印 还尝试了mysql_查询(“S

我正在编写一个网页,用户可以上传自己的画廊。执行此操作时,系统会为与库同名的图像创建一个子文件夹,对库的引用将作为行添加到表中,并为库创建一个单独的表,其中包含图像列表

当我尝试创建一个新的画廊时,只要没有西欧标志,一切都很好。例如,如果我将库命名为“beär”,我将得到一个错误,“Table'databasename.beÃr..”不存在

但是,该表确实存在且名称正确, 在mysql查询返回错误之前,我已经尝试打印出变量$sub(表示查询中的库名称),它正确打印

还尝试了mysql_查询(“SET NAMES'latin1',$connection)),并使用UTF-8进行了相同的操作 latin1什么也不做,UTF-8将所有的东西都拧得更紧(画廊的名称实际上是“r”)

文本文件采用ISO 8859-1编码,字符集定义也是ISO 8859-1

以下是查询:

if(!($result = @ mysql_query("SELECT * FROM {$database}.`{$sub}`
            ORDER BY item_id DESC", $connection)))
        {showerror();}
非常感谢您的帮助

表“databasename.beÃr…”

您正在以库的名称创建数据库表。这对于任何编码中的特殊字符都不会起作用

更正:根据,确实可以使用当前字符集中的任何字母数字字符!在这种情况下,您需要更改输入。查看错误消息,
Beär
中的
ä
被用作UTF-8字符。您需要修复它。这是在Ajax r中发生的吗equest?默认情况下,它们被编码为UTF-8

在任何情况下,我都会对在表名中使用特殊字符感到不安。我不会这么做

此外,创建每个用户的表通常是一个基本设计错误的征兆。为什么不将所有记录保存在一个表中,通过一列标识用户

表“databasename.beÃr…”

您正在以库的名称创建数据库表。这对于任何编码中的特殊字符都不会起作用

更正:根据,确实可以使用当前字符集中的任何字母数字字符!在这种情况下,您需要更改输入。查看错误消息,
Beär
中的
ä
被用作UTF-8字符。您需要修复它。这是在Ajax r中发生的吗equest?默认情况下,它们被编码为UTF-8

在任何情况下,我都会对在表名中使用特殊字符感到不安。我不会这么做


此外,创建每个用户的表通常是一个基本设计错误的症状。为什么不将所有记录保存在一个表中,通过列来识别用户?

您真正的问题是数据库设计。解决了这个问题,您就不会有上述问题(以及许多其他问题)你真正的问题是数据库设计。解决了这个问题,你就不会有上面的问题(还有很多其他问题)。这是一个每个库表系统,而不是每个用户。它不是一个社区,因此用户可以编辑相同的库(如果他们有正确的权限)此外,即使一个人在可能的情况下不应该使用特殊字符,至少能够使用æø和å是重要的,因为它们(可悲的是)是挪威语不可或缺的一部分。sql查询来自一个php脚本。@Rakoon为每个图库创建一个表的设计很糟糕。正如我所说,为什么不使用一个带有
图库
字段的大表呢?这将解决所有命名问题。即使您使用特殊字符,也会有很多图库名称因为mySQ而无法使用L的命名限制。是的。我在开始制作系统时就考虑过这样做,但最终还是采用了每表设计。我会考虑将其转换为一个大表,而不是许多小表。非常感谢您的帮助。您可以使用您喜欢的任何字符作为架构名称,但是当您创建表时,MySQL使用架构名称作为存储数据的文件名的基础。因此,如果文件名中的Unicode字符有问题(如果您在Windows上,则可能有问题),我想它可能确实会失败。我同意您通常应该避免在架构名称中使用非ASCII字符,并且在任何情况下都不应该在架构名称中使用用户输入。SQL注入安全漏洞的可能性是无穷无尽的。当然,正如每个人都说的,每个实例的表都是一场灾难。这是一个每个库的表系统,n每个用户的ot。这不是一个社区,因此用户有权编辑相同的图库(如果他们有正确的权限),而且,即使可能不应该使用特殊字符,至少能够使用æø和å是重要的,因为他们(不幸地)是挪威语不可或缺的一部分。sql查询来自一个php脚本。@Rakoon为每个图库创建一个表的设计很糟糕。正如我所说,为什么不使用一个带有
图库
字段的大表呢?这将解决所有命名问题。即使您使用特殊字符,也会有很多图库名称因为mySQ而无法使用L的命名限制。是的。我在开始制作系统时就考虑过这样做,但最终还是采用了每表设计。我会考虑将其转换为一个大表,而不是许多小表。非常感谢您的帮助。您可以使用您喜欢的任何字符作为架构名称,但是当您创建表时,MySQL使用架构名称作为存储数据的文件名的基础。因此,如果文件名中的Unicode字符有问题(如果您在Windows上,则可能有问题),我想它可能确实会失败。我同意您通常应该避免在架构名称中使用非ASCII字符,并且在任何情况下都不应该在架构名称中使用用户输入。SQL注入安全漏洞的可能性是无穷的。当然,作为ev