通过ODBC连接检索到的表情符号数据显示为问号

时间:2019-11-19 22:24:40

标签: mysql asp-classic odbc

我从经典的ASP页面连接到MySQL 5.5.50-log。

MySQL数据库的设置如下:

  • 数据库字符集:utf8mb4
  • 数据库整理:utf8mb4_general_ci

表和字段:

  • 字符集:utf8mb4
  • 整理:utf8mb4_general_ci

要测试,我在表中有包含以下字符串的数据:?(T_T)é,è,à,ç

这是来自SQLyog的数据的屏幕截图:

enter image description here

这是我的测试网页:

	<!DOCTYPE html>
	
	<html lang="en">
		<head>
			<meta charset="utf-8">
			<meta http-equiv="X-UA-Compatible" content="IE=edge">
			<meta name="viewport" content="width=device-width, initial-scale=1.0">
			<title>Test</title>
			<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
		</head>
		<body>
		<p>Pasted directly from database field: ?(T_T) é, è, à, ç</p>
		<p>Returned from SQL statement: ?(T_T) é, è, à, ç</p>
		</body>
	</html>

问题不在于表情符号数据不能显示在网页上,因为直接粘贴MySQL的内容看起来不错。问题在于,一旦通过ODBC驱动程序从MySQL的SQL Select中返回了数据,它就无法正确呈现。

我在ASP代码中设置了以下内容:

Response.CodePage = 65001
Response.CharSet = "utf-8"

我尝试了其他变体-例如

Response.CodePage = 1252
Response.LCID = 1060
Response.Charset = "utf-8"

但是他们没什么区别。

我尝试了各种MySQL ODBC驱动程序-例如

''----------------------
''connection string
''----------------------

Dim oConn
set oConn = Server.CreateObject("ADODB.Connection")
'oConn.Open "DRIVER={MySQL ODBC 5.1 Driver}; Server=localhost; Database=mydb; User=root; Password=testing; Option=3; CharSet=utf8mb4; stmt=SET NAMES 'utf8mb4';"

那行不通...

我尝试使用系统DSN代替这些驱动程序:

  • MySQL ODBC 5.1驱动程序
  • MySQL ODBC 8.0 Unicode驱动程序
  • MySQL ODBC 8.0 ANSI驱动程序

他们都没有解决问题。

我想知道是否有解决办法,或者基本上没有办法显示使用Classic ASP从MySQL数据库检索到的表情符号数据?

据我所知,通过阅读其他地方,MySQL数据库已以支持存储表情符号字符的方式正确设置,这一事实得到了事实的证实,我可以毫无问题地查看存储在数据库中的事实。只是当我尝试通过Classic ASP到MySQL连接将其从数据库中拉出时,表情符号字符不会显示。

编辑-ASP页面本身另存为UTF-8编码文件:

enter image description here

1 个答案:

答案 0 :(得分:1)

除了设置响应并将文件另存为UTF-8之外,您可能还需要设置这样的页面语言。请注意,这应该在文件的最顶部,然后再进行其他操作:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
response.codepage = 65001
response.charset = "utf-8"
%>

我已经在编码方面进行了很多努力,并且我们一半的系统是由非UTF文件组成的,而这里的这段代码正是使我能够使用UTF-8实现其自身功能的原因。