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

标签 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>

问题不是emoji数据不能显示在网页上,因为从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 驱动程序

他们都没有解决问题。

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

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

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

enter image description here

最佳答案

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

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

我在编码方面付出了很多努力,我们的系统有一半是由非 UTF 文件组成的,而这里的这段代码使我能够使用 UTF-8 来实现我自己的功能。

关于mysql - 通过 ODBC 连接检索的表情符号数据显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943772/

相关文章:

asp-classic - ASP/VBScript "Gotchas"

删除文件DSN后Excel查询表仍然有效,怎么可能?

mysql - 选择每个子查询的前 n 行

php - 尝试通过 HTML 和 php 将数据插入 Mysql 数据库时出错

mysql - 具有特定 ID 的行数而不按 SQL 分组

sql-server - 尚不支持pandas + pyodbc ODBC SQL类型-150

mysql - 我必须位于哪个工作目录才能连接到 R 中的 MySQL 服务器

当我将列的大小从 BIGINT(11) 更改为 BIGINT(20) 时,MySql 表列删除了其 AI 标志

ssl - 带 SSL3 的 MSXML2.ServerXMLHTTP?

iis - 经典 ASP/IIS6/Win2003 服务器无法与 TLS 服务器通信