2010-06-28 55 views
1

我正在编程一个网页,用户可以上传他自己的图库。当这样做时,系统为与图库具有相同名称的图像创建子文件夹,对图库的引用作为表格的一行添加,并为图库创建单独的表格,其中包含图像列表。西欧语言mysql查询问题

当我尝试创建一个新的画廊时,只要没有西欧标志,一切都会正常工作。如果我举例说名称的画廊“beär”我会得到一个错误,“表'databasename.beär...'不存在。

然而,表存在与正确的名称, 我有尝试在mysql查询返回错误之前打印出变量$ sub(表示查询中的库名称),它正确地打印错误。

还试过mysql_query(“SET NAMES'latin1'”,$ connection) ))和UTF-8 一样,latin1什么都不做,UTF-8将所有东西都拧得更紧(图片名称实际上就是be?rr)

文本文件在ISO 8859-1, c harset定义也是ISO 8859-1

这是查询:

if(!($result = @ mysql_query("SELECT * FROM {$database}.`{$sub}` 
      ORDER BY item_id DESC", $connection))) 
     {showerror();} 

任何帮助是极大的赞赏

+0

你真正的问题是数据库设计。解决这个问题,你将不会遇到上述问题(还有很多其他问题) – Pete 2010-06-28 10:46:38

回答

5

表“databasename.beär...

您正在通过图库名称创建数据库表 在任何编码中,都无法与特殊字符一起播放!

修正:根据docs,它确实是可以使用任何字母数字字符,从当前字符集!在这种情况下,你需要改变你的输入。查看错误消息,Beär中的ä将作为UTF-8字符提供。你需要解决这个问题。这是发生在Ajax请求中吗?这些默认编码为UTF-8。

在任何情况下,我都觉得在表名中使用特殊字符会感到不自在。我不会这样做。

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

+0

+1尤其是关于数据库设计。 – Pete 2010-06-28 10:45:45

+0

这是一个每个图库表系统,而不是每个用户。这不是一个社区,所以用户有权编辑相同的画廊(如果他们拥有正确的权限) 另外,即使不应该使用特殊字符(如果可能),至少可以使用æø和因为他们(可惜)是挪威的一个组成部分。 sql查询来自php脚本。 – Rakoon 2010-06-28 10:58:01

+0

@Rakoon为每个画廊创建一个表是糟糕的设计。正如我所说,为什么不用一个大画廊来放置一个'gallery'字段?这将解决所有的命名问题。即使你使用特殊字符,由于mySQL的命名限制,也会有很多库名无法使用。 – 2010-06-28 11:02:28