我从经典 ASP 页面连接到 MySQL 版本 5.5.50-log。
MySQL数据库设置如下:
- 数据库字符集:utf8mb4
- 数据库整理:utf8mb4_general_ci
表和字段:
- 字符集:utf8mb4
- 整理:utf8mb4_general_ci
为了测试,我在表中有数据,其中包含此字符串:🍔(T_T) é, è, à, ç
这是来自 SQLyog 的数据的屏幕截图:
这是我的测试网页:
<!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 编码文件:
最佳答案
除了设置响应并将文件保存为 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/